微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 并行化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池进行了一些实验 – 但它既不是很好的代码,也没有得到我的计算结果.

解决方法:

我认为沿着并行尝试的方式走下去可能会使这个问题变得复杂化.我没有在大样本上尝试这种方法,所以你的里程可能会有所不同,但它应该给你一个想法……

让我们从一些日期开始……

import pandas as pd

dates = pd.to_datetime(['2016-01-03', '2016-09-09', '2016-12-12', '2016-03-03'])

我们将使用来自pandas.tseries.holiday的一些假日数据 – 请注意,实际上我们需要一个DatetimeIndex …

from pandas.tseries.holiday import USFederalHolidayCalendar

holiday_calendar = USFederalHolidayCalendar()
holidays = holiday_calendar.holidays('2016-01-01')

这给了我们:

DatetimeIndex(['2016-01-01', '2016-01-18', '2016-02-15', '2016-05-30',
               '2016-07-04', '2016-09-05', '2016-10-10', '2016-11-11',
               '2016-11-24', '2016-12-26',
               ...
               '2030-01-01', '2030-01-21', '2030-02-18', '2030-05-27',
               '2030-07-04', '2030-09-02', '2030-10-14', '2030-11-11',
               '2030-11-28', '2030-12-25'],
              dtype='datetime64[ns]', length=150, freq=None)

现在我们使用searchsorted找到原始日期最近的假期的索引:

indices = holidays.searchsorted(dates)
# array([1, 6, 9, 3])
next_nearest = holidays[indices]
# DatetimeIndex(['2016-01-18', '2016-10-10', '2016-12-26', '2016-05-30'], dtype='datetime64[ns]', freq=None)

然后取两者之间的差异:

next_nearest_diff = pd.to_timedelta(next_nearest.values - dates.values).days
# array([15, 31, 14, 88])

你需要注意索引,所以你不要回头,并且对于前一个日期,用索引进行计算 – 1但它应该充当(我希望)一个相对较好的基础.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐