删除值远小于周围行的数据框行

时间:2019-05-26 02:16:27

标签: python pandas

Date          Data
2016-04-29    12
2016-04-30    13
2016-05-01    2
2016-05-02    11
2016-05-03    12
2016-05-04    3
2016-05-05    14

在上面的datafrme中,我要删除那些行值下降到相邻2行以下平均8个单位的行,例如与日期2016-05-01和2016-05-04对应的行中的值至少在紧接2行的下方至少8个单位。结果应如下所示:

Date          Data
2016-04-29    12
2016-04-30    13
2016-05-02    11
2016-05-03    12
2016-05-05    14

1 个答案:

答案 0 :(得分:1)

您应该看看pandas.Series.diff

我会这样:

>>> df
            Data
Date            
2016-04-29    12
2016-04-30    13
2016-05-01     2
2016-05-02    11
2016-05-03    12
2016-05-04     3
2016-05-05    14

>>> df[(df.Data.diff().fillna(0) > -8) & (df.Data.diff(-1).fillna(0) > -8)]
            Data
Date            
2016-04-29    12
2016-04-30    13
2016-05-02    11
2016-05-03    12
2016-05-05    14

说明

第一个表达式计算的行差取第二个负号,依此类推。然后替换第一行中的NaN

第二个表达式计算第一个减去第二个之后的行差,以此类推。在最后一行替换NaN。我过滤掉了两个表达式都导致值低于给定阈值的行。