我有一个熊猫数据框,如下所示:
ID Date Event_Type
1 01/01/2019 A
1 01/01/2019 B
2 02/01/2019 A
3 02/01/2019 A
我想留下来:
ID Date
1 01/01/2019
2 02/01/2019
3 02/01/2019
我的情况是:
如果ID
相同且dates
彼此相距2天之内,则删除其中一行。
但是,如果日期相隔两天以上,则保留这两行。
我该怎么做?
答案 0 :(得分:3)
我认为您首先需要通过to_datetime
将值转换为日期时间,然后获取diff
并通过isnull()
获取每组的第一值,并比较下一个值是否更高,例如timedelta阈值:
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
s = df.groupby('ID')['Date'].diff()
df = df[(s.isnull() | (s > pd.Timedelta(2, 'd')))]
print (df)
ID Date Event_Type
0 1 2019-01-01 A
2 2 2019-02-01 A
3 3 2019-02-01 A
用其他数据检查解决方案:
print (df)
ID Date Event_Type
0 1 01/01/2019 A
1 1 04/01/2019 B <-difference 3 days
2 2 02/01/2019 A
3 3 02/01/2019 A
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
s = df.groupby('ID')['Date'].diff()
df = df[(s.isnull() | (s > pd.Timedelta(2, 'd')))]
print (df)
ID Date Event_Type
0 1 2019-01-01 A
1 1 2019-01-04 B
2 2 2019-01-02 A
3 3 2019-01-02 A