我需要在df上应用一个函数,我使用了一个pandarallel来并行化这个过程,但是我这里有一个问题,我需要给func_do一个N行的每个调用,这样我就可以利用这个函数的向量化了。
下面将调用每一行的func_do。是否知道如何对每个批进行单个调用并保持并行化过程。
def fun_do(value_col):
return do(value_col)
df['processed_col'] = df.parallel_apply(lambda row: fun_do(row['col']), axis=1)发布于 2022-07-03 12:45:36
一个可能的解决方案是创建N行的虚拟组:
import pandas as pd
from pandarallel import pandarallel
# Setup MRE
pandarallel.initialize(progress_bar=False)
df = pd.DataFrame({'col1': np.linspace(0, 100, 11)})
def fun_do(sr):
return sr**2
N = 4 # size of chunk
df['col2'] = (df.groupby(pd.RangeIndex(len(df)) // N)
.parallel_apply(lambda x: fun_do(x['col1']))
.droplevel(0)) # <- remove virtual group index输出:
>>> df
col1 col2
0 0.0 0.0
1 10.0 100.0
2 20.0 400.0
3 30.0 900.0
4 40.0 1600.0
5 50.0 2500.0
6 60.0 3600.0
7 70.0 4900.0
8 80.0 6400.0
9 90.0 8100.0
10 100.0 10000.0备注:我不知道为什么groupby(...)['col'].parallel_apply(fun_do)不工作。parallel_apply似乎在SeriesGroupBy中不可用。
这是我第一次使用pandarallel,通常是used multiprocessing module
https://stackoverflow.com/questions/72845864
复制相似问题