如何在python数据框中获取列的唯一组合并按它们排序?

时间:2016-05-30 06:02:48

标签: python sorting pandas dataframe group-by

如何在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 

1 个答案:

答案 0 :(得分:1)

col2col1使用groupby,但需要swaplevel(如果订单栏col1col2很重要){ {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

第二个解决方案首先需要col2col1列中的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

另一个解决方案是先groupby,然后是groupby

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