首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为批处理的行调用parallel_apply

为批处理的行调用parallel_apply
EN

Stack Overflow用户
提问于 2022-07-03 10:51:54
回答 1查看 591关注 0票数 0

我需要在df上应用一个函数,我使用了一个pandarallel来并行化这个过程,但是我这里有一个问题,我需要给func_do一个N行的每个调用,这样我就可以利用这个函数的向量化了。

下面将调用每一行的func_do。是否知道如何对每个批进行单个调用并保持并行化过程。

代码语言:javascript
复制
def fun_do(value_col):
    return do(value_col)
df['processed_col'] = df.parallel_apply(lambda row: fun_do(row['col']), axis=1)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-03 12:45:36

一个可能的解决方案是创建N行的虚拟组:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
>>> 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72845864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档