pandas - 熊猫:根据日期列创建一个时期
问题描述
我有一个数据框
ID datetime
11 01-09-2021 10:00:00
11 01-09-2021 10:15:15
11 01-09-2021 15:00:00
12 01-09-2021 15:10:00
11 01-09-2021 18:00:00
如果它增加到 2 小时,我需要添加仅基于日期时间的时间段
ID datetime period
11 01-09-2021 10:00:00 1
11 01-09-2021 10:15:15 1
11 01-09-2021 15:00:00 2
12 01-09-2021 15:10:00 2
11 01-09-2021 18:00:00 3
同样的事情,但基于 ID 和日期时间
ID datetime period
11 01-09-2021 10:00:00 1
11 01-09-2021 10:15:15 1
11 01-09-2021 15:00:00 2
12 01-09-2021 15:10:00 1
11 01-09-2021 18:00:00 3
我怎样才能做到这一点?
解决方案
您可以通过Series.diff
、转换为 hours Series.dt.total_seconds
、comapre for2
并添加累积总和来获得差异:
df['period'] = df['datetime'].diff().dt.total_seconds().div(3600).gt(2).cumsum().add(1)
print (df)
ID datetime period
0 11 2021-01-09 10:00:00 1
1 11 2021-01-09 10:15:15 1
2 11 2021-01-09 15:00:00 2
3 12 2021-01-09 15:10:00 2
4 11 2021-01-09 18:00:00 3
每组类似的想法:
f = lambda x: x.diff().dt.total_seconds().div(3600).gt(2).cumsum().add(1)
df['period'] = df.groupby('ID')['datetime'].transform(f)
print (df)
ID datetime period
0 11 2021-01-09 10:00:00 1
1 11 2021-01-09 10:15:15 1
2 11 2021-01-09 15:00:00 2
3 12 2021-01-09 15:10:00 1
4 11 2021-01-09 18:00:00 3
推荐阅读
- c# - UserControl 的通用列表
- java - 从集合转移
数据到 HashMap (Java) - swift - 如何在 ARKit 2/SceneView 中延长线段
- html - 打印asp.net,javascript后更改表格的字体大小和列宽
- bash - 如何在shell脚本中使用AND运算符进行字符串相等
- javascript - javascript包含方法输出不正确的结果
- java - 访问 Google 表格服务帐户
- python - 一个一个替换的Itertools排列
- sql - Tableau - 如何在折线图上显示最后 # 天
- ios - 使用不带自我的 addTarget(target:action:)