gpt4 book ai didi

python - 在 pandas groupby 之后并行化应用

转载 作者:IT老高 更新时间:2023-10-28 20:37:08 31 4
gpt4 key购买 nike

我在groupby之后使用rosetta.parallel.pandas_easy并行化apply,例如:

from rosetta.parallel.pandas_easy import groupby_to_series_to_frame
df = pd.DataFrame({'a': [6, 2, 2], 'b': [4, 5, 6]},index= ['g1', 'g1', 'g2'])
groupby_to_series_to_frame(df, np.mean, n_jobs=8, use_apply=True, by=df.index)

但是,有没有人想出如何并行化返回 DataFrame 的函数?正如预期的那样,此代码对于 rosetta 失败。

def tmpFunc(df):
df['c'] = df.a + df.b
return df

df.groupby(df.index).apply(tmpFunc)
groupby_to_series_to_frame(df, tmpFunc, n_jobs=1, use_apply=True, by=df.index)

最佳答案

这似乎可行,虽然它确实应该内置在 pandas 中

import pandas as pd
from joblib import Parallel, delayed
import multiprocessing

def tmpFunc(df):
df['c'] = df.a + df.b
return df

def applyParallel(dfGrouped, func):
retLst = Parallel(n_jobs=multiprocessing.cpu_count())(delayed(func)(group) for name, group in dfGrouped)
return pd.concat(retLst)

if __name__ == '__main__':
df = pd.DataFrame({'a': [6, 2, 2], 'b': [4, 5, 6]},index= ['g1', 'g1', 'g2'])
print 'parallel version: '
print applyParallel(df.groupby(df.index), tmpFunc)

print 'regular version: '
print df.groupby(df.index).apply(tmpFunc)

print 'ideal version (does not work): '
print df.groupby(df.index).applyParallel(tmpFunc)

关于python - 在 pandas groupby 之后并行化应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26187759/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com