根据应用于索引的条件过滤行

时间:2019-02-19 18:54:29

标签: python pandas

我有一个以日期为索引的DataFrame:

            VL
2018-02-05  101.56093
2018-12-31  95.87728
2019-01-04  96.29820
2019-01-11  97.23475
2019-01-18  98.39828
2019-01-25  98.66896
2019-01-31  99.12407
2019-02-01  99.13224
2019-02-08  99.06382
2019-02-15  99.79966    

我需要过滤行,以便对于日期为D的每一行,如果DataFrame中存在带有D-7的行,请保留该行

示例:

  • 2019-02-15将保留,因为存在2019-02-08

  • 2019-01-31将被过滤,因为2019-01-24不存在。

我已经使用循环实现了此功能,但我想知道是否还有更多面向熊猫的方式来进行这种过滤。

1 个答案:

答案 0 :(得分:2)

IIUC,您可以使用pd.Timedeltaisin

df[(df['date'] - pd.Timedelta(days=7)).isin(df['date'])]

输出:

        date        VL
3 2019-01-11  97.23475
4 2019-01-18  98.39828
5 2019-01-25  98.66896
7 2019-02-01  99.13224
8 2019-02-08  99.06382
9 2019-02-15  99.79966

如果日期在索引中,则使用此:

df[(df.index - pd.Timedelta(days=7)).isin(df.index)]

输出:

                  VL
date                
2019-01-11  97.23475
2019-01-18  98.39828
2019-01-25  98.66896
2019-02-01  99.13224
2019-02-08  99.06382
2019-02-15  99.79966
相关问题