从 pandas 数据框中删除“重叠”日期

2024-03-09

我有一个 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 检查多行中的重叠日期 https://stackoverflow.com/questions/36654198/pandas-check-for-overlapping-dates-in-multiple-rows and 从 pandas 数据框中消除特定日期的最快方法 https://stackoverflow.com/questions/37307796/fastest-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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 pandas 数据框中删除“重叠”日期 的相关文章

随机推荐