gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:01:01 24 4
gpt4 key购买 nike

我从下面的列表中构建了一个 DataFrame

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

我现在想要一个新的数据框,它只显示每组具有相同 n_legs 的前 4 个条目(按 age 排序)。

为此我尝试过

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))

关于python - 当 N 大于组数时 nlargest(N) 的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54591355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com