如何在Pandas DataFrame中通过EndTime与时长计算StartTime?
计算Pandas DataFrame中的StartTime列
你的代码出错核心原因是不能直接用单个timedelta对象去减整个Series列——不管是datetime.timedelta还是pd.Timedelta,直接传Series参数都会报错或得到错误结果,得用Pandas支持的向量化时间操作。
下面是两种可行的正确实现方式:
方法1:直接使用已有的Duration_TimeDelta列
既然你已经把时长转换成了timedelta格式的Duration_TimeDelta列,直接做列级减法最简洁:
df['StartTime'] = df['EndTime'] - df['Duration_TimeDelta']
方法2:用pd.to_timedelta转换Duration_Minutes列
如果想基于整数格式的Duration_Minutes计算,需要先把整列转为timedelta类型,再做减法:
df['StartTime'] = df['EndTime'] - pd.to_timedelta(df['Duration_Minutes'], unit='m')
结果验证
运行上述代码后,会得到符合跨天逻辑的正确结果:
| id | EndTime | StartTime |
|---|---|---|
| 1 | 00:53:18 | 22:53:18 |
| 2 | 01:04:38 | 00:29:38 |
| 3 | 05:04:38 | 04:59:38 |
(注:你提到的第二个预期结果12:29:38应为笔误,实际01:04:38减去35分钟的正确结果是00:29:38)
内容的提问来源于stack exchange,提问作者VBC
相关产品推荐
相关产品推荐

