加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

当大于组数时,nlargest(N)的行为?

发布时间:2020-12-17 17:37:08 所属栏目:Python 来源:网络整理
导读:我已经从以下列表构建了一个DataFrame df_list_1 = [{"animal": "dog","color": "red","age": 4,"n_legs": 4,},{"animal": "dog","color": "blue","n_legs": 3},{"animal": "cat","n_legs": 4},"color": "yellow","age": 5,"n_legs":2},"color": "white","n_

我已经从以下列表构建了一个DataFrame

df_list_1 = [{"animal": "dog","color": "red","age": 4,"n_legs": 4,},{"animal": "dog","color": "blue","n_legs": 3},{"animal": "cat","n_legs": 4},"color": "yellow","age": 5,"n_legs":2},"color": "white","n_legs": 2},"color": "black","color": "brown","n_legs": 4}]

我现在想获得一个新的数据框,该数据框仅显示每个具有相同n_legs的组的前4个条目(按年龄排序).

为此,我尝试了

dfg = df_1.set_index(["animal",'color']).groupby("n_legs")['age'].nlargest(4).reset_index()

但这给了我一个数据帧,其中删除了n_legs列.

    animal  color   age
0   dog     red     4
1   dog     blue    4
2   cat     blue    4
3   dog     yellow  5
4   dog     white   4
5   dog     black   4
6   cat     brown   4

我猜这是因为4等于最大组中的元素数.事实上,如果我这样做

dfg = df_1.set_index(["animal",'color']).groupby("n_legs")['age'].nlargest(3).reset_index()

我得到以下

    n_legs  animal  color   age
0   2       dog     yellow  5
1   2       dog     white   4
2   3       dog     blue    4
3   4       dog     red     4
4   4       cat     blue    4
5   4       dog     black   4

这是预期的行为吗?

即使使用nlargest(N)且N大于最大组中元素的数量,有没有办法始终显示列?

谢谢!

最佳答案
我认为这是bug 16345.

替代解决方案效果很好,而且运行速度明显更快-首先sort_values,然后致电GroupBy.head

dfg = (df_1.sort_values(["animal",'color','age'],ascending=[False,False,True])
          .groupby("n_legs")
          .head(4))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读