熊猫在每一行上更快地执行日期计算

时间:2020-01-08 21:24:25

标签: python pandas dataframe

我有一个包含多个列的数据框,包括analysis_date(日期时间)和forecast_hour(整数)。我想添加一个名为total_hours的新列,它是analysis_date的小时部分加上该行中相应的forecast_hour的总和。这是一个视觉示例:

原始数据框:

analysis_date | forecast_hour
12-2-19-05    | 3
12-2-19-06    | 3
12-2-19-07    | 3
12-2-19-08    | 3

计算后的数据框:

analysis_date | forecast_hour | total_hours
12-2-19-05    | 3             | 8
12-2-19-06    | 3             | 9
12-2-19-07    | 3             | 10
12-2-19-08    | 3             | 11

这是当前执行我想要的逻辑:

df['total_hours'] = df.apply(lambda row: row.analysis_date.hour + row.forecast_hours_out, axis=1)

不幸的是,这对于我的应用程序来说太慢了,一个具有数十万个条目的数据帧大约需要15秒。我尝试使用swifter库,但是不幸的是,它花费的时间大约(如果不长)与当前的实现时间相同。

1 个答案:

答案 0 :(得分:3)

apply很慢,因为它没有向量化。这应该做您想要的(假设df['analysis_date']datetime64):

df['total_hours'] = df['analysis_date'].dt.hour + df['forecast_hour']