gpt4 book ai didi

python pandas 从多个子组中选择顶部 'n'

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:03 25 4
gpt4 key购买 nike

我有一个 DataFrame,假设有 3 列:

col1 | col2 | col3
A | x | p
A | x | q
A | x | r
A | x | r
A | y | s
A | y | t
A | z | u
B | x | q
B | x | r
B | y | t

我想根据 3 列的唯一组合的出现次数对其进行分组,然后仅选择 col3 的前 2 (n) 个值的记录

因此,如果 (A, x) 的组合在 col3 中有 9 个 p、8 个 q 和 3 个 r - 那么它应该只显示 col3 的前 2 个计数:

A | x | p | 9
A | x | q | 8

我已经尝试过 nlargest、head 和其他论坛的一些其他选项,但它们都不适用于子组——它们只显示整个组的前 n 个

最佳答案

我认为需要groupbyvalue_counts然后 groupby 通过第一级和第二级 head :

df1 = (df.groupby(['col1','col2'])['col3']
.value_counts()
.groupby(level=[0,1])
.head(2)
.reset_index(name='count'))
print (df1)
col1 col2 col3 count
0 A x p 9
1 A x q 8
2 A y s 1
3 A y t 1
4 A z u 1
5 B x q 1
6 B x r 1
7 B y t 1

详细信息:

print (df.groupby(['col1','col2'])['col3'].value_counts())
col1 col2 col3
A x p 9
q 8
r 3
y s 1
t 1
z u 1
B x q 1
r 1
y t 1
Name: col3, dtype: int64

设置:

d = {'col1': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B'], 'col2': ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'y', 'y', 'z', 'x', 'x', 'y'], 'col3': ['p', 'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'r', 'r', 'r', 's', 't', 'u', 'q', 'r', 't']}
df = pd.DataFrame(d)
print (df)
col1 col2 col3
0 A x p
1 A x p
2 A x p
3 A x p
4 A x p
5 A x p
6 A x p
7 A x p
8 A x p
9 A x q
10 A x q
11 A x q
12 A x q
13 A x q
14 A x q
15 A x q
16 A x q
17 A x r
18 A x r
19 A x r
20 A y s
21 A y t
22 A z u
23 B x q
24 B x r
25 B y t

关于python pandas 从多个子组中选择顶部 'n',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49333494/

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