我正在尝试按连续日期对ID进行分组.
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
我试过了:
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'])
today = pd.to_datetime('2018-10-23')
x = df.sort_values('Date', ascending=0)
g = x.groupby(['ID'])
x[(today - x['Date']).dt.days == g.cumcount()].groupby(['ID']).size()
解决方法:
创建一个系列,用于检查每个ID中日期之间的差异.检查是否不是1天,然后按ID和该系列的累计总和进行分组.
import pandas as pd
s = df.groupby('ID').Date.diff().dt.days.fillna(1).ne(1).cumsum()
df.groupby(['ID', s]).size().reset_index(level=1, drop=True)
输出:
ID
abc 3
abc 1
xyz 2
xyz 2
dtype: int64
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。