假设我有一个像这样的数据的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
假设我不会总是知道将调用哪个顺序或项目。
我尝试了一些非常复杂的循环试图获得相同的项目数,然后通过该索引来比较和删除数据帧中除最低行之外的所有项,但这似乎不起作用。我还怎么做呢?
答案 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]
这个分组item
,as_index=False
表示您希望分组输出看起来更像原始分类,["diff"]
选择diff
列,min()
表示我们想要最小值。
阅读文档的groupby部分可能会有所帮助,因为一旦掌握了它,就可以做很多简洁的事情。
[请注意,如果您希望在多个相等的最小值的情况下保留多行,事情会变得有点复杂,但您仍然可以将其拉下来。]