我有以下熊猫数据帧df
:
Actual Scheduled
2017-01-01 04:03:00.000 2017-01-01 04:25:00.000
2017-01-01 04:56:00.000 2017-01-01 04:55:00.000
2017-01-01 04:36:00.000 2017-01-01 05:05:00.000
2017-01-01 06:46:00.000 2017-01-01 06:55:00.000
2017-01-01 06:46:00.000 2017-01-01 07:00:00.000
我需要创建一个额外的列DIFF_MINUTES
,它包含Actual
和Scheduled
(Actual - Scheduled
)之间的差异(以分钟为单位)
这就是我试图解决这项任务的方式:
import pandas as pd
import datetime
df["Actual"] = df.apply(lambda row: datetime.datetime.strptime(str(row["Actual"]),"%Y-%m-%d %H:%M:%S.%f"), axis=1)
df["Scheduled"] = df.apply(lambda row: datetime.datetime.strptime(str(row["Scheduled"]),"%Y-%m-%d %H:%M:%S.%f"), axis=1)
df["DIFF_MINUTES"] = df.apply(lambda row: (pd.Timedelta(row["Actual"]-row["Scheduled"]).seconds)/60, axis=1)
但是,对于负差异情况,我得到了错误的结果(例如,04:03:00-04:25:00应该给出22分钟,而不是1418分钟):
Actual Scheduled DIFF_MINUTES
2017-01-01 04:03:00 2017-01-01 04:25:00 1418.0
2017-01-01 04:56:00 2017-01-01 04:55:00 1.0
2017-01-01 04:36:00 2017-01-01 05:05:00 1411.0
2017-01-01 06:46:00 2017-01-01 06:55:00 1431.0
2017-01-01 06:46:00 2017-01-01 07:00:00 1426.0
如何修复它
预期结果:
Actual Scheduled DIFF_MINUTES
2017-01-01 04:03:00 2017-01-01 04:25:00 -22.0
2017-01-01 04:56:00 2017-01-01 04:55:00 1.0
2017-01-01 04:36:00 2017-01-01 05:05:00 -29
2017-01-01 06:46:00 2017-01-01 06:55:00 -9.0
2017-01-01 06:46:00 2017-01-01 07:00:00 -14.0
假设两列都是日期时间,只运行:
(一艘班轮)
如果从Excel或CSV文件中读取此数据框,请添加 parse_dates=[0,1]参数将这些列转换为日期, 这样就不需要通过代码强制转换它们
如果出于某种原因,您将这些列设置为文本,则 将其转换为运行:
(另一种比“普通Python”函数更快的解决方案)
使用^{} 作为(同时检查列中的日期是第一个月还是第一个月):
相关问题 更多 >
编程相关推荐