Python 两列的格式表排序
我需要帮助格式化我的表格。这是一个更简单的版本,我将用一个例子来解释它。如果我有如下表格:Python 两列的格式表排序,python,pandas,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
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
最好的方法是什么。有什么想法吗?您可能需要创建一个帮助键,用于按
groupby
转换
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
设置为有序分类,并分别按Col1
和Col2
升序和降序排序:
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
太神了谢谢