在pandas数据框中将两个时间列相加?

4

我有以下数据:

 time_begin  DRTN_IN_SCND
 16:22:16           439
 16:29:37            53
 16:30:33            85

我想创建一个新列,将time_begin和DRTN_IN_SCND(以秒为单位的持续时间)相加,以创建一个新的时间。

我尝试过:

df['new_time'] = df['time_begin'].apply(lambda x: (dt.datetime.combine(dt.datetime(1,1,1), x,) + dt.timedelta(seconds=df.DRTN_IN_SCND)).time())

如果使用dt.timedelta(seconds=3)可以正常工作,但是当我更改为dt.timedelta(seconds=df.DRTN_IN_SCND)时就无法工作了。我会得到以下错误。

TypeError: unsupported type for timedelta seconds component: Series

有谁知道如何修复这个问题或者有其他方法来完成我想做的事情吗?谢谢!


你究竟想做什么?是要将 time_begin + DRT_IN_SCND 相加,第一行显示为 16:29:35 吗? - Deusdeorum
是的,没错。谢谢你澄清了这个问题。 - jam
2个回答

5

如果您想对DRTN_IN_SCNDtime_begin列进行正确的计算,您需要将它们转换为时间差,Pandas具有非常方便的to_timedelta函数:

df['DRTN_IN_SCND'] = pd.to_timedelta(df['DRTN_IN_SCND'], unit='s')
df['time_begin'] = pd.to_timedelta(df['time_begin'])
df['new_time'] = df['time_begin'] + df['DRTN_IN_SCND']

这将为您创建一个新的列new_time
   time_begin  DRTN_IN_SCND  new_time
0    16:22:16      00:07:19  16:29:35
1    16:29:37      00:00:53  16:30:30
2    16:30:33      00:01:25  16:31:58

谢谢,Hugo。那个很好用。我确实不得不更改time_begin的格式,从datetime.time变成了df.time_begin=df.time_begin.apply(lambda x: x.strftime('%H:%M:%S')),但之后它就没有出现错误了。 - jam
df['time_begin'] 也可以存在为 datetime 值,不需要转换为 timedelta - Prageeth Jayathissa

1

问题

您正在使用 applydf['new_time'] 上,它是一个系列,在 lambda 中,您正在引用另一个系列 df.DRTN_IN_SCND。因此,错误指出您正在尝试将时间对象添加到系列对象中,而它不知道该怎么做。

解决方案

相反地,请在数据帧上使用 apply。在这种情况下,lambda 函数中的 x 是系列,您可以通过 ix 访问每个组件。这样就可以实现您想要的效果。

df['new_time'] = df.apply(lambda x: x.ix['time_begin'] + dt.timedelta(seconds=x.ix['DRTN_IN_SCND']), axis=1)

谢谢,piRSquared。我尝试你的解决方案时出现了以下错误:TypeError: ("unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'", u'occurred at index 133564')。你知道这是什么原因吗? - jam
我没有遇到那个错误。对我来说,这些类型完全可以合理地加在一起。我会继续调查的。如果你弄清楚了,请务必评论,这样我就知道要停止查找了。 - piRSquared
DRT_IN_SCND 需要进行任何格式化吗?现在它只是一个 int64。 - jam
你得到的错误正确地识别了对象类型 datetime.timedatetime.timedelta。它告诉我们这些是无效的加在一起的东西。然而,这恰好是我们认为应该加在一起的。它在我的设备上可以工作。我唯一能想到的是这可能是一个版本问题。 - piRSquared
Python 2.7.11 | Anaconda 4.0.0(64位)| - piRSquared
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接