gpt4 book ai didi

python - 如何在pandas中按组获得最大限制的前n行

转载 作者:行者123 更新时间:2023-12-03 21:47:57 35 4
gpt4 key购买 nike

我有一个看起来像这样的数据框

pd.DataFrame({'A': ['C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10'],
...: 'B': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C'],
...: 'R': [9, 1, 7, 4, 3, 5, 2, 6, 8, 10]})
Out[3]:
A B R
0 C1 A 9
1 C2 A 1
2 C3 A 7
3 C4 B 4
4 C5 B 3
5 C6 B 5
6 C7 B 2
7 C8 C 6
8 C9 C 8
9 C10 C 10
R 列是我的排名列,我想获得排名前 5 的项目(A 列),但是,B 列中每组最多可以选择 3 个项目。
我知道我可以执行以下操作来选择排名前 5 的项目
df.sort_values('R').head(5)
Out[10]:
A B R
1 C2 A 1
6 C7 B 2
4 C5 B 3
3 C4 B 4
5 C6 B 5
但这会从 B 组中选择 4 个项目。我如何限制它选择每个组最多只有 3 个项目?我生成的数据框应该是这样的
    A  B  R
1 C2 A 1
6 C7 B 2
4 C5 B 3
3 C4 B 4
5 C8 C 6
逻辑 - 项目 C6 未选择,因为它是 B 组的第 4 个项目,因此下一个要选择的可用项目是 C8,它具有次佳排名且不违反组限制。

最佳答案

我们可以试试 GroupBy.head

new_df = df.sort_values('R').groupby('B', sort=False).head(3).head(5)
print(new_df)
    A  B  R
1 C2 A 1
6 C7 B 2
4 C5 B 3
3 C4 B 4
7 C8 C 6

关于python - 如何在pandas中按组获得最大限制的前n行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63639543/

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