Python 数据帧中无日期的caluclate持续时间
我有一个数据框,其中一列(t1)表示人们通常上床睡觉的时间,一列(t2)表示人们通常起床的时间,如下所示:Python 数据帧中无日期的caluclate持续时间,python,pandas,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 =
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:)您可以这样做,如果
t1>12小时,则在t2
中增加一天,然后找出差异:
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
将数据帧中的所有时间转换为包含日期(2020-01-01),然后如果时间t2
将t2的日期设置为(2020-01-02),然后减去日期幸运的是,第一行已经给出了这样的错误:不能转换为datetime这需要在将列转换为datetime.Time之前完成。我没有转换它,它只是从excel中输出的。有没有办法解决这个问题?我应该先将列转换为某种格式吗?将列转换为字符串df['t1']=df['t1'].astype(str)
谢谢,这很有效!但我没有具体说明,我想要什么格式的timeinbed,对不起!我需要一个带hh,mm的十进制数。所以,我要么放弃天数,转换时间,要么一开始就用不同的方法计算时间?