如何解决分组时保留其他列
方法1:使用idxmin()
来获取minimum元素的 索引diff
,然后选择那些元素:
>>> df.loc[df.groupby("item")["diff"].idxmin()]
item diff otherstuff
1 1 1 2
6 2 -6 2
7 3 0 0
[3 rows x 3 columns]
>>> df.sort_values("diff").groupby("item", as_index=False).first()
item diff otherstuff
0 1 1 2
1 2 -6 2
2 3 0 0
[3 rows x 3 columns]
请注意,即使行内容相同,结果索引也不同。
解决方法
我在groupby
pandas数据框上使用来删除没有特定列的最小值的所有行。像这样:
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()
但是这些都不起作用(我在最后一个中意识到,语法是在创建组后进行聚合的)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。