输入数据格式如下。
日期 | |
---|---|
2021年1月18日下午7:26:9 UTC | True |
2021年1月18日下午7:24:56 UTC | 正确 |
2021年1月18日下午7:23:42 UTC | 正确 |
2020年10月27日下午9:36:52 UTC | 错误 |
2020年10月27日下午8:23:16 UTC | 错误 |
2020年10月27日下午7:48:20 UTC | 错误 |
2021年10月27日下午6:24:56 UTC | True |
2021年10月27日下午5:24:56 UTC | True |
2020年10月28日下午7:48:20 UTC,错误 |
将列转换为日期时间,并通过Series.dt.date
和辅助列g
按日期聚合min
和max
,连续True
秒和False
秒,然后相减并获得时间增量。
df['date'] = pd.to_datetime(df['date'])
df['g'] = df['State'].ne(df['State'].shift()).cumsum()
df = df.groupby([df['date'].dt.date, 'State','g'], sort=False)['date'].agg(['max','min'])
df = df['max'].sub(df['min']).reset_index(level=2, drop=True).reset_index(name='td')
print (df)
date State td
0 2021-01-18 True 0 days 00:02:27
1 2020-10-27 False 0 days 01:48:32
2 2021-10-27 True 0 days 01:00:00
3 2020-10-28 False 0 days 00:00:00
如果需要秒,添加Series.dt.total_seconds
:
df['sec'] = df['td'].dt.total_seconds()
print (df)
date State td
0 2021-01-18 True 147.0
1 2020-10-27 False 6512.0
2 2021-10-27 True 3600.0
3 2020-10-28 False 0.0