如何在python数据框中获取列的唯一组合并按它们排序?我知道我可以使用df.groupby(['col1','col2'])。size()来获得唯一的组合。但是,我还希望按col2的升序排序结果顺序,然后按col1升序。例如,如果我的数据框是这样的:
col1 col2
0 A 1
1 B 3
2 C 2
3 D 1
4 A 1
5 F 2
我希望最终输出看起来像这样:
col1 col2
0 A 1
1 D 1
2 C 2
3 F 2
4 B 3
答案 0 :(得分:1)
col2
和col1
使用groupby
,但需要swaplevel
(如果订单栏col1
和col2
很重要){ {3}} - 解决方案使用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
和col1
列中的reset_index
,然后将参数sort=False
添加到sort_values
,因为默认情况下sort=True
:
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
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