gpt4 book ai didi

python - 从 Pandas 数据框中删除 'overlapping' 日期

转载 作者:太空狗 更新时间:2023-10-30 00:59:04 27 4
gpt4 key购买 nike

我有一个 pandas 数据框,如下所示:

ID  date       close
1 09/15/07 123.45
2 06/01/08 130.13
3 10/25/08 132.01
4 05/13/09 118.34
5 11/07/09 145.99
6 11/15/09 146.73
7 07/03/11 171.10

我想删除所有重叠的行。

重叠行定义为另一行 X 天内的任何行。例如,如果 X = 365。那么结果应该是:

ID  date       close
1 09/15/07 123.45
3 10/25/08 132.01
5 11/07/09 145.99
7 07/03/11 171.10

如果 X = 50,结果应该是:

ID  date       close
1 09/15/07 123.45
2 06/01/08 130.13
3 10/25/08 132.01
4 05/13/09 118.34
5 11/07/09 145.99
7 07/03/11 171.10

我已经查看了此处的几个问题,但没有找到正确的方法。例如,Pandas check for overlapping dates in multiple rowsFastest way to eliminate specific dates from pandas dataframe相似,但不能完全满足我的需求。

我今天有以下丑陋的代码,适用于较小的 X 值,但当 X 变大时(例如,当 X = 365 时),它会删除除原始日期之外的所有日期。

filter_dates = []
for index, row in df.iterrows():
if observation_time == 'D':
for i in range(1, observation_period):
filter_dates.append((index.date() + timedelta(days=i)))
df = df[~df.index.isin(filter_dates)]

如有任何帮助/指点,我们将不胜感激!

澄清:

这个问题的解决方案需要查看每一行,而不仅仅是第一行。

最佳答案

您可以添加新列来过滤结果:

df['filter'] = df['date'] - df['date'][0]
df['filter'] = df['filter'].apply(lambda x: x.days)

然后按 365 过滤使用这个:

df[df['filter']%365==0]

关于python - 从 Pandas 数据框中删除 'overlapping' 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45616375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com