我有一个包含多个列的数据框,包括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库,但是不幸的是,它花费的时间大约(如果不长)与当前的实现时间相同。
答案 0 :(得分:3)
apply
很慢,因为它没有向量化。这应该做您想要的(假设df['analysis_date']
是datetime64
):
df['total_hours'] = df['analysis_date'].dt.hour + df['forecast_hour']