Python joblib并向dataframe添加新行
我定义以下函数来更新我的日期框Python joblib并向dataframe添加新行,python,Python,我定义以下函数来更新我的日期框 def func(idx,value): if idx in df.index: df.loc[idx] += value else: df.loc[idx] = value 然后,我使用joblib进行并行循环 Parallel(n_jobs=-1)(delayed(func)(idx, value) for idx, value in key(df2.name,df.score)) 例如,我有两个数据帧: n
def func(idx,value):
if idx in df.index:
df.loc[idx] += value
else:
df.loc[idx] = value
然后,我使用joblib进行并行循环
Parallel(n_jobs=-1)(delayed(func)(idx, value) for idx, value in key(df2.name,df.score))
例如,我有两个数据帧:
name score
john 10
及
然后,我希望我的函数将第一个数据帧更新为
name score
john 20
chris 30
然后,我得到一个错误,说赋值目的地是只读的。我认为这是因为我试图在并行计算时向数据帧添加新行
有什么办法可以四处走动吗?我也愿意接受除并行循环之外的任何其他建议,比如使用cudf进行gpu计算(不确定循环速度是否加快)。您可以对数据帧进行分组,并迭代分组,将每个分组传递给函数,并将函数结果存储到列表中,最后可以连接到列表中 这里我们有一些名字和年龄,我们将按年龄分组并传递一个并行函数,取平均值并将结果返回到一个列表中,该列表被连接为最终产品
import pandas as pd
from joblib import Parallel, delayed
import multiprocessing
df = pd.DataFrame({'name':['john','john','chris','chris'],
'age':[23,46,32,56]})
def applyParallel(dfGrouped, func):
retLst = Parallel(n_jobs=multiprocessing.cpu_count())(delayed(func)(name, data) for name, data in dfGrouped)
return pd.concat(retLst)
def my_function(name,data):
### Process data here
data = data.groupby('name').mean()
return data
# Group by some column in your dataframe
output = applyParallel(df.groupby(['name']), my_function)
输出
age
name
chris 44.0
john 34.5
嗨,我试过你的代码,但它没有给我我想要的。。。我已经添加了我想要的示例,如果我弄错了,请解释一下您的代码可以如何再次帮助我?非常感谢。
age
name
chris 44.0
john 34.5