格式化熊猫表的两列排序

时间:2018-09-11 17:03:03

标签: python pandas

我需要格式化表格的帮助。这是一个简单的版本,我将通过一个示例进行说明。如果我有一个如下表:

Col1    Col2

    A   8
    B   2
    C   3
    A   4
    B   5
    C   6
    A   7
    B   1
    C   9

我希望将其安排在col2最高值首先出现的位置。在这种情况下,帐户C的值为9。因此,所有帐户C的值均遵循,并按Col2顺序排列。接下来,最高值由帐户A显示,因此所有帐户A值都遵循,并再次按Col2值顺序排列。 决赛桌看起来应该像这样:

Col1    Col2
C   9
C   6
C   3
A   8
A   7
A   4
B   5
B   2
B   1

什么是最好的方法?有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您可能需要通过sort_values groupbytransform创建帮助键

df['helperkey']=df.groupby('Col1').Col2.transform('max')
df.sort_values(['helperkey','Col2'],ascending=[False,False]).drop('helperkey',1)
Out[102]: 
  Col1  Col2
8    C     9
5    C     6
2    C     3
0    A     8
6    A     7
3    A     4
4    B     5
1    B     2
7    B     1

答案 1 :(得分:0)

也许有更好的方法,但是您可以弄清楚顺序,将列Col1设置为有序分类,然后按Col1Col2进行升序和降序排序分别订购:

order = df.groupby('Col1').max().sort_values('Col2', ascending=False).index

df['Col1'] = pd.Categorical(df['Col1'], categories=order, ordered=True)

df.sort_values(['Col1', 'Col2'], ascending=[True,False])

  Col1  Col2
8    C     9
5    C     6
2    C     3
0    A     8
6    A     7
3    A     4
4    B     5
1    B     2
7    B     1