在pandas数据帧中一起添加两个时间列?

时间:2016-05-06 15:44:27

标签: python datetime pandas

我有以下数据:

 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

有谁知道如何解决这个或其他方式来完成我想要做的事情?谢谢!

2 个答案:

答案 0 :(得分:2)

如果你想对列进行正确的计算,你必须将DRTN_IN_SCNDtime_begin转换为时间增量,pandas有to_timedelta非常方便:< / p>

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

答案 1 :(得分:1)

问题

您正在使用apply df['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)