python - 并行化 Pandas 应用

标签 python pandas parallel-processing apply embarrassingly-parallel

刚接触 pandas,我已经想并行化一个按行应用操作。到目前为止我找到了Parallelize apply after pandas groupby但是,这似乎只适用于分组数据框。

我的用例不同:我有一个假期列表,对于我当前的行/日期,我想找到从这一天到下一个假期之前和之后的无天数。

这是我通过应用调用的函数:

def get_nearest_holiday(x, pivot):
    nearestHoliday = min(x, key=lambda x: abs(x- pivot))
    difference = abs(nearesHoliday - pivot)
    return difference / np.timedelta64(1, 'D')

我怎样才能加快速度?

编辑

我对 pythons 池进行了一些试验 - 但它既不是很好的代码,也没有得到我的计算结果。

最佳答案

对于并行方法,这是基于 Parallelize apply after pandas groupby 的答案:

from joblib import Parallel, delayed
import multiprocessing

def get_nearest_dateParallel(df):
    df['daysBeforeHoliday'] = df.myDates.apply(lambda x: get_nearest_date(holidays.day[holidays.day < x], x))
    df['daysAfterHoliday']  =  df.myDates.apply(lambda x: get_nearest_date(holidays.day[holidays.day > x], x))
    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)

print ('parallel version: ')
# 4 min 30 seconds
%time result = applyParallel(datesFrame.groupby(datesFrame.index), get_nearest_dateParallel)

但我更喜欢@NinjaPuppy 的方法,因为它不需要 O(n * number_of_holidays)

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

相关文章:

python - 在计算中有效避免大型中间数组?

python - py2app:如何包含将由 __import__ 加载的模块?

python - 使用 IN 和 python 列表构建 SQL 查询字符串

c# - 并行下载大量文件的有效方法

multithreading - 关于多线程、并发和并行

python - 运行 Django 单元测试会导致南迁移重复表

python - 合并年和周列以在 python 中创建日期时间和排序

python - loc 和 ix 之间的意外差异

python - 将数据框 reshape 为长格式 python

PostgreSQL。可以并行运行更新查询吗?