如果指定列的值未严格增加,如何删除数据框的行?

时间:2018-10-17 12:32:51

标签: python pandas dataframe

好吧,我认为这应该很简单,只需在列表理解中使用if语句。无论如何,我不知道该如何处理。

正如您在下面看到的那样,我想遍历行并删除这些行,其中列“ 1”的当前值小于之前的值。

我想用增加的值制作一个新的数据框。 我不想对数据框进行排序。

print (df)
                0      1
649  1.244399e-09   9.07
648  1.152221e-09   9.00
647  1.075406e-09   8.96
646  1.013954e-09   8.92
645  9.371397e-10   8.88
644  2.243742e-09   9.57
643  2.113292e-09   9.50
642  1.956752e-09   9.42
641  1.826302e-09   9.37
640  1.721942e-09   9.33
639  1.591492e-09   9.28
638  1.487131e-09   9.23
637  1.408861e-09   9.19
636  1.304501e-09   9.14
635  4.809608e-09  10.32

2 个答案:

答案 0 :(得分:2)

Series.diffboolean indexing一起使用进行过滤:

#if need first and second value for increasing second value
#df1 = df[df[1].diff().bfill() > 0]
df1 = df[df[1].diff() > 0]
print (df1)
                0      1
644  2.243742e-09   9.57
635  4.809608e-09  10.32

详细信息

print (df[1].diff())
649     NaN
648   -0.07
647   -0.04
646   -0.04
645   -0.04
644    0.69
643   -0.07
642   -0.08
641   -0.05
640   -0.04
639   -0.05
638   -0.05
637   -0.04
636   -0.05
635    1.18
Name: 1, dtype: float64

答案 1 :(得分:1)

l = [x for x in df.index if x > 0 and df[x]['column1'] > df[x - 1]['column1']]

l中存储所需的所有行索引,然后继续使用loc操作符。

df2 = df.loc[l]