格式化熊猫表排序两列



我需要有关格式化表格的帮助。这是一个更简单的版本,我将用一个例子来解释它。如果我有一个如下表:

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

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

您可能需要通过groupbytransform创建用于sort_values的帮助密钥

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

可能有更好的方法,但您可以找出顺序,将列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

最新更新