使用python根据日期条件删除行

CHR*_*HRD 2 python dataframe pandas

我有一个数据框,其中包含一个日期和一个 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
Run Code Online (Sandbox Code Playgroud)

我想要实现的是,对于每个唯一 id(B示例中的列),从最近的行开始,并根据日期条件删除行:如果在 10 天内插入具有现有 id 的行具有该 ID 的最近行,只有最新行有效。所以在这个例子中,以 10 天为限制,我最终会得到这个结果:

           A  B
0 2020-01-01  a
2 2019-12-17  a
3 2020-01-01  b
4 2019-12-14  b
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激!

WeN*_*Ben 5

这是一种方法,使用diffwith 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
Run Code Online (Sandbox Code Playgroud)