这是一个使用panda的python版本,它保留最早的日期,然后删除该日期7天窗口内的任何后续日期:
import pandas as pd
def filter_dates(group):
group = group.sort_values(by='Date')
filtered_dates = []
last_date = None
for date in group['Date']:
if last_date is None or (date - last_date).days > 7:
filtered_dates.append(date)
last_date = date
return group[group['Date'].isin(filtered_dates)]
if __name__ == "__main__":
data = {
'ID': [111, 111, 111, 111, 111, 222, 222, 222, 222, 222],
'Date': ['16/09/2021', '14/03/2022', '18/03/2022', '21/03/2022', '22/03/2022',
'27/03/2022', '30/03/2022', '04/04/2022', '06/04/2022', '13/04/2022']
}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
result_df = df.groupby('ID').apply(filter_dates, include_groups=False).reset_index(drop=True)
print(result_df)
在这篇文章中,我将其转换为日期时间格式,然后按ID对其进行分组。filter_data()函数然后删除彼此相距7天以内的日期。
它打印出以下内容:
ID level_1 Date
0 111 0 2021-09-16
1 111 1 2022-03-14
2 111 4 2022-03-22
3 222 5 2022-03-27
4 222 7 2022-04-04
5 222 9 2022-04-13