比较行,然后在必要时删除行

时间:2016-04-25 19:11:43

标签: python python-2.7 pandas dataframe

我有一个示例数据框如下所示。

df = pd.DataFrame({ 'Area' : ['1', '2', '3', '4','5', '6', '7', '8', '9', '10'],
                    'Distance' : ['19626207', '20174412', '20175112', '19396352',
                    '19391124', '19851396', '19221462', '20195112',  '21127633', '19989793'],
                  })

  Area  Distance
0    1  19626207
1    2  20174412
2    3  20175112
3    4  19396352  # smaller, take out
4    5  19391124  #
5    6  19851396  #
6    7  19221462  #
7    8  20195112
8    9  21127633  
9   10  19989793  #

“距离”列需要按升序排序。

但是数据帧的顺序是固定的('Area'的顺序不可更改),

这意味着,如果行比以前的行小,那么 需要取出行。例如,这是我想看到的结果。

  Area  Distance
    1   19626207
    2   20174412
    3   20175112
    8   20195112
    9   21127633

我知道我可以尝试for i in range(0, len(index), 1) ...

之类的东西

但是有没有更好的方法来实现使用熊猫的目标?

有任何提示吗?

1 个答案:

答案 0 :(得分:3)

UPDATE2:这里是ayhan的解决方案正确

In [135]: df[df.Distance.astype("int64")>=df.Distance.astype("int64").cummax()]
Out[135]:
  Area  Distance
0    1  19626207
1    2  20174412
2    3  20174412
7    8  20195112
8    9  21127633

<强>更新

以下解决方案 NOT 始终正常运行,因为它会删除所有重复项。因此,如果您在原始DF中存在重复值,它们将消失。

以下是一个例子:

In [122]: df
Out[122]:
  Area  Distance
0    1  19626207
1    2  20174412  # duplicates
2    3  20174412  # they should BOTH be in the result set
3    4  19396352
4    5  19391124
5    6  19851396
6    7  19221462
7    8  20195112
8    9  21127633
9   10  19989793

In [123]: df.loc[df.Distance.cummax().drop_duplicates().index]
Out[123]:
  Area  Distance
0    1  19626207
1    2  20174412  # one duplicate has been dropped
7    8  20195112
8    9  21127633

PS我会尝试找到一个可行的解决方案

OLD回答:

我不确定它是否是最有效的方法,但它有效:

In [94]: df.loc[df.Distance.cummax().drop_duplicates().index]
Out[94]:
  Area  Distance
0    1  19626207
1    2  20174412
2    3  20175112
7    8  20195112
8    9  21127633

说明:

In [98]: df.Distance.cummax()
Out[98]:
0    19626207
1    20174412
2    20175112
3    20175112
4    20175112
5    20175112
6    20175112
7    20195112
8    21127633
9    21127633
Name: Distance, dtype: object