计算熊猫数据框中没有日期的持续时间

时间:2020-11-07 14:59:50

标签: python pandas

我有一个数据框,其中有一个列(t1)给出了人们通常上床睡觉的时间,和一个列(t2)给出了人们通常上床睡觉的时间,看起来像这样:

ID       t1           t2
p001   22:30:00    7:00:00
...
p055   01:20:00    9:00:00
...

我想创建一个新的列,给出在床上花费的时间,这是这两次的总和。像这样简单的减法

Df['hoursinbed'] = Df['t2']- Df['t1']

当然不起作用,因为开始时间通常在前一天。

我也尝试过:

t1 = pd.to_datetime(Df['t1'])
t2 = pd.to_datetime(Df['t2'])

print (pd.Timedelta(t2-t1).seconds / 60.0)

但这可能仅在开始时间和结束时间包含日期时有效吗?

有人知道如何解决吗? TIA:)

1 个答案:

答案 0 :(得分:1)

您可以这样做,如果t2,则将一天添加到t1 > 12 hours中,然后找出差额:

df['t1'] = pd.to_datetime(df['t1'])
df['t2'] = pd.to_datetime(df['t2'])

df['t2'] = np.where(df['t1'].dt.hour > 12, df['t2'] + pd.DateOffset(1), df['t2'])
df['timeinbed'] = df['t2'] - df['t1']

df['t1'] = df['t1'].dt.strftime('%H:%M')
df['t2'] = df['t2'].dt.strftime('%H:%M')

print(df)

     ID     t1     t2       timeinbed
0  p001  22:30  07:00 0 days 08:30:00
1  p055  01:20  09:00 0 days 07:40:00