我有一个数据框,其中有一个列(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:)
答案 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