2016-05-30 38 views
1

如何在python数据框中获得列的唯一组合并对它们进行排序?我知道我可以使用df.groupby(['col1','col2'])。size()来获得唯一的组合。但是,我也希望按col2的升序排列结果顺序,然后按col1升序排列。例如,如果我的数据帧是这样的:如何获得列的独特组合并按python数据框排序?

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 

回答

1

使用groupby通过col2col1,但随后需要swaplevel(如果顺序列col1col2是重要的)与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_valuescol1,然后因为默认情况下sort=True添加参数sort=Falsegroupby,:

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