【发布时间】:2014-06-17 03:37:15
【问题描述】:
我在 pandas 数据帧上使用 groupby 来删除所有没有特定列最小值的行。像这样:
df1 = df.groupby("item", as_index=False)["diff"].min()
但是,如果我有两个以上的列,则其他列(例如我的示例中的 otherstuff)将被删除。我可以使用groupby 保留这些列,还是我必须找到一种不同的方法来删除这些行?
我的数据如下:
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
但我得到的是:
item diff
0 1 1
1 2 -6
2 3 0
我一直在查看文档,但找不到任何东西。我试过了:
df1 = df.groupby(["item", "otherstuff"], as_index=false)["diff"].min()
df1 = df.groupby("item", as_index=false)["diff"].min()["otherstuff"]
df1 = df.groupby("item", as_index=false)["otherstuff", "diff"].min()
但是这些都不起作用(我意识到最后一个语法是用于在创建组后进行聚合)。
【问题讨论】:
-
所以你想保留包含'diff'列最小值的整行,包括其他列的任何值。是的,这不在pandas doc 的范围内,但应该是,请提出一个 docbug。
标签: python pandas aggregate pandas-groupby