Python 数据帧中无日期的caluclate持续时间

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 =

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

您可以这样做,如果
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的十进制数。所以,我要么放弃天数,转换时间,要么一开始就用不同的方法计算时间?