python中索引数据帧中不同列的行之间的相减
我有一个索引数据帧(先按类型索引,然后按日期索引),并希望在顶行的结束时间和下一行的开始时间之间执行减法(以小时为单位):python中索引数据帧中不同列的行之间的相减,python,pandas,indexing,Python,Pandas,Indexing,我有一个索引数据帧(先按类型索引,然后按日期索引),并希望在顶行的结束时间和下一行的开始时间之间执行减法(以小时为单位): type date start_time end_time code A 01/01/2018 01/01/2018 9:00 01/01/2018 14:00 525 01/02/2018 01/02/2018 5:00
type date start_time end_time code
A 01/01/2018 01/01/2018 9:00 01/01/2018 14:00 525
01/02/2018 01/02/2018 5:00 01/02/2018 17:00 524
01/04/2018 01/04/2018 8:00 01/04/2018 10:00 528
B 01/01/2018 01/01/2018 5:00 01/01/2018 14:00 525
01/04/2018 01/04/2018 2:00 01/04/2018 17:00 524
01/05/2018 01/05/2018 7:00 01/05/2018 10:00 528
我希望得到带有新列['interval']的结果表:
type date interval
A 01/01/2018 -
01/02/2018 15
01/04/2018 39
B 01/01/2018 -
01/04/2018 60
01/05/2018 14
间隔列以小时为单位您可以将
开始时间
和结束时间
转换为日期时间格式,然后使用应用
减去每组上一行的结束时间
(使用groupby
)。要转换为小时,请除以pd.Timedelta(“1小时”):
@sacul感谢您的编辑,开始时间和结束时间都是日期时间。数据类型为'
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])
df['interval'] = (df.groupby(level=0,sort=False).apply(lambda x: x.start_time-x.end_time.shift(1)) / pd.Timedelta('1 hour')).values
>>> df
start_time end_time code interval
type date
A 01/01/2018 2018-01-01 09:00:00 2018-01-01 14:00:00 525 NaN
01/02/2018 2018-01-02 05:00:00 2018-01-02 17:00:00 524 15.0
01/04/2018 2018-01-04 08:00:00 2018-01-04 10:00:00 528 39.0
B 01/01/2018 2018-01-01 05:00:00 2018-01-01 14:00:00 525 NaN
01/04/2018 2018-01-04 02:00:00 2018-01-04 17:00:00 524 60.0
01/05/2018 2018-01-05 07:00:00 2018-01-05 10:00:00 528 14.0