python - 确定每组的连续日期期间
问题描述
想知道如何通过每个组的周期计数器重置来识别连续的日期周期。
这是我的尝试,它在整个 DataFrame 中执行,但无法按组锻炼如何执行此操作。
import pandas as pd
data = {
"peoples": ["jimbob","jimbob","jimbob", "jimbob","jimbob","jimbob", "sonnyjim","sonnyjim","sonnyjim","sonnyjim"],
"dates": ["2020-11-01","2020-11-02","2020-11-03","2020-11-06","2020-11-09","2020-11-10", "2020-11-12","2020-11-13","2020-11-20","2020-11-22"]
}
df = pd.DataFrame(data)
df["dates"] = pd.to_datetime(df["dates"])
df["period"] = df["dates"].diff().dt.days.ne(1).cumsum()
print(df)
我希望能够做这样的事情:
peoples dates period
0 jimbob 2020-11-01 1
1 jimbob 2020-11-02 1
2 jimbob 2020-11-03 1
3 jimbob 2020-11-06 2
4 jimbob 2020-11-09 3
5 jimbob 2020-11-10 3
6 sonnyjim 2020-11-12 1
7 sonnyjim 2020-11-13 1
8 sonnyjim 2020-11-20 2
9 sonnyjim 2020-11-22 3
解决方案
您可以groupby
在数据框上peoples
应用自定义lambda
函数dates
来计算连续的日期块:
f = lambda s: s.diff().dt.days.ne(1).cumsum()
df['period'] = df.groupby('peoples')['dates'].apply(f)
peoples dates period
0 jimbob 2020-11-01 1
1 jimbob 2020-11-02 1
2 jimbob 2020-11-03 1
3 jimbob 2020-11-06 2
4 jimbob 2020-11-09 3
5 jimbob 2020-11-10 3
6 sonnyjim 2020-11-12 1
7 sonnyjim 2020-11-13 1
8 sonnyjim 2020-11-20 2
9 sonnyjim 2020-11-22 3
推荐阅读
- android - 使用 Okhttp 连接 web 服务失败
- node.js - Linkedin - 预览图像不显示
- c# - SQL 选择具有多个整数值的行
- ocr - Nativescript : 带有 nativescript-ocr 的相机照片资源
- python-3.x - Python字符串到日期时间日期
- plot - 如何在 Julia 中制作对数图?
- python - 如何首先按值对字典进行排序,然后按键排序
- data-structures - 给定上下文中的数据结构和数据表示
- python - 如何在odoo中修改模型,从而可以丢弃修改?
- mysql - 使用 cgo 构建时如何调试/转储 Go 变量?