格式化表两列排序

2024-04-25 19:46:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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顺序排列。接下来,最高值由account A显示,所以所有account A值都跟随,同样按Col2值的顺序排列。 最后一个表应该如下所示:

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

最好的办法是什么。有什么想法吗?你知道吗


Tags: 版本地方帐户account例子表格col2col1
2条回答

您可能需要通过groupbytransformsort_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

相关问题 更多 >