比较数据帧的单元格,其中另一个单元格对于多列是相同的?

时间:2014-04-30 15:58:22

标签: python pandas

假设我有一个像这样的数据的pandas数据框:

    item    diff   otherstuff
   0   1       2            1
   1   1       1            2
   2   1       3            7
   3   2      -1            0
   4   2       1            3
   5   2       4            9
   6   2      -6            2
   7   3       0            0
   8   3       2            9

是否可以比较具有相同项目的所有行并仅保留具有最低差异的项目?

所以这个表最终会成为:

    item   diff  otherstuff
   0   1      1           2
   1   2     -6           2
   2   3      0           0

假设我不会总是知道将调用哪个顺序或项目。

我尝试了一些非常复杂的循环试图获得相同的项目数,然后通过该索引来比较和删除数据帧中除最低行之外的所有项,但这似乎不起作用。我还怎么做呢?

1 个答案:

答案 0 :(得分:3)

为此,您可以使用groupby

>>> df.groupby("item", as_index=False)["diff"].min()
   item  diff
0     1     1
1     2    -6
2     3     0

[3 rows x 2 columns]

这个分组itemas_index=False表示您希望分组输出看起来更像原始分类,["diff"]选择diff列,min()表示我们想要最小值。

阅读文档的groupby部分可能会有所帮助,因为一旦掌握了它,就可以做很多简洁的事情。

[请注意,如果您希望在多个相等的最小值的情况下保留多行,事情会变得有点复杂,但您仍然可以将其拉下来。]