我认为需要groupby 和value_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