pandas 将min()与groupby一起使用时, 并保留其他列数据, 类似于sql中的group by having min()

网友投稿 257 2022-09-21

pandas 将min()与groupby一起使用时, 并保留其他列数据, 类似于sql中的group by having min()

我正在使用​​groupby​​pandas数据帧删除所有没有特定列的最小行。像这样的东西:

df1 = df.groupby("item", as_index=False)["diff"].min()

但是,如果我有超过这两列,则其他列将被删除。我可以使用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()

但是没有一个可以

查阅可以有解决约这样的

方法#1:用于​​idxmin()​​获取最小元素的索引​​diff​​,然后选择:

>>> df.loc[df.groupby("item")["diff"].idxmin()] item diff otherstuff1 1 1 26 2 -6 27 3 0 0[3 rows x 3 columns]

方法#2:排序​​diff​​​依次,然后取每组中的第一个元素​​item​​:

>>> df.sort_values("diff").groupby("item", as_index=False).first() item diff otherstuff0 1 1 21 2 -6 22 3 0 0[3 rows x 3 columns]

请注意,即使行内容相同,结果索引也不同。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小米11发布,首发骁龙888芯片,售价3999元起!
下一篇:Docker 入门:容器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~