使用 Python 按连续日期分组为日期范围
我有以下数据集。
ID Date
abc 2017-01-07
abc 2017-01-08
abc 2017-01-09
abc 2017-12-09
xyz 2017-01-05
xyz 2017-01-06
xyz 2017-04-15
xyz 2017-04-16
我可以
ID Count
abc 3
abc 1
xyz 2
xyz 2
使用 count Continuous days python 中提到的以下代码 生成以下输出dataframe
d = {
'ID': ['abc', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'xyz', 'xyz'],
'Date': ['2017-01-07','2017-01-08', '2017-01-09', '2017-12-09', '2017-01-05', '2017-01-06', '2017-04-15', '2017-04-16']
}
df = pd.DataFrame(data=d)
df['Date'] = pd.to_datetime(df['Date'])
series = df.groupby('ID').Date.diff().dt.days.ne(1).cumsum()
df.groupby(['ID', series]).size().reset_index(level=1, drop=True)
如何获得以下输出?
ID Start End
abc 2017-01-07 2017-01-09
abc 2017-12-09 2017-12-09
xyz 2017-01-05 2017-01-06
xyz 2017-04-15 2017-04-16
I have the following data set.
ID Date
abc 2017-01-07
abc 2017-01-08
abc 2017-01-09
abc 2017-12-09
xyz 2017-01-05
xyz 2017-01-06
xyz 2017-04-15
xyz 2017-04-16
I am able to generate the following output
ID Count
abc 3
abc 1
xyz 2
xyz 2
using the following code mentioned in count consecutive days python dataframe
d = {
'ID': ['abc', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'xyz', 'xyz'],
'Date': ['2017-01-07','2017-01-08', '2017-01-09', '2017-12-09', '2017-01-05', '2017-01-06', '2017-04-15', '2017-04-16']
}
df = pd.DataFrame(data=d)
df['Date'] = pd.to_datetime(df['Date'])
series = df.groupby('ID').Date.diff().dt.days.ne(1).cumsum()
df.groupby(['ID', series]).size().reset_index(level=1, drop=True)
How can I get the following output?
ID Start End
abc 2017-01-07 2017-01-09
abc 2017-12-09 2017-12-09
xyz 2017-01-05 2017-01-06
xyz 2017-04-15 2017-04-16
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用:
输出:
You can use:
output:
使用@mozway的答案
使用
agg
:Use @mozway's answer
Use
agg
: