使用groupby
通过col2
和col1
,但随后需要swaplevel
(如果顺序列col1
和col2
是重要的)与reset_index
- 解决方案使用默认排序groupby
:
df1 = df.groupby(['col2','col1']).size().swaplevel(0,1).reset_index(name='count')
print (df1)
col1 col2 count
0 A 1 2
1 D 1 1
2 C 2 1
3 F 2 1
4 B 3 1
第二种解决方案需要在col2
列第一sort_values
和col1
,然后因为默认情况下sort=True
添加参数sort=False
到groupby
,:
df = df.sort_values(['col2','col1'])
print (df)
col1 col2
0 A 1
4 A 1
3 D 1
2 C 2
5 F 2
1 B 3
print (df.groupby(['col1','col2'], sort=False).size())
col1 col2
A 1 2
D 1 1
C 2 1
F 2 1
B 3 1
dtype: int64
另一种解决方案是先groupby
然后sort_values
:
df1 = df.groupby(['col1','col2']).size().reset_index(name='count')
print (df1)
col1 col2 count
0 A 1 2
1 B 3 1
2 C 2 1
3 D 1 1
4 F 2 1
df1 = df1.sort_values(['col2','col1'])
print (df1)
col1 col2 count
0 A 1 2
3 D 1 1
2 C 2 1
4 F 2 1
1 B 3 1