我有一个数据框,其中包括日期和ID列。以下是仅出于此问题目的的示例框架。但是实际数据包括更多的行和列。
from datetime import date, timedelta
import pandas as pd
date = datetime.datetime(2020, 1, 1)
delta_1 = 5
delta_2 = 15
delta_3 = 18
data = {
'A': [date, date - timedelta(delta_1), date - timedelta(delta_2), date, date - timedelta(delta_3)],
'B': ['a', 'a', 'a', 'b', 'b']
}
df = pd.DataFrame(data)
print(df)
A B
0 2020-01-01 a
1 2019-12-27 a
2 2019-12-17 a
3 2020-01-01 b
4 2019-12-14 b
我想要实现的是,对于每个唯一的ID(示例中的列B
),从最新的行开始,然后根据日期条件删除行:如果具有ID的行已存在是从最近的具有该ID的行起10天内插入的,只有最新的行才有效。因此,在此示例中,以10天为限制,我将得到以下结果:
A B
0 2020-01-01 a
2 2019-12-17 a
3 2020-01-01 b
4 2019-12-14 b
任何想法将不胜感激!
答案 0 :(得分:5)
这是一种方法,将diff
与cumsum
一起使用,获取日差总和,然后通过//
得到除数
s=df.groupby('B').A.apply(lambda x : x.diff().dt.days.cumsum().fillna(0).abs()//10)
df=df.groupby([df.B,s]).head(1)
A B
0 2020-01-01 a
2 2019-12-17 a
3 2020-01-01 b
4 2019-12-14 b