熊猫排序多列

问题描述 投票:1回答:1

我有以下数据帧

A   B
b   10
b   5
a   25
a   5
c   6
c   2
b   20
a   10
c   4
c   3
b   15

我该如何排序如下:

A   B
b   20
b   15
b   10
b   5
a   25
a   10
a   5
c   6
c   4
c   3
c   2

列A基于列B中的对应值的总和以降序排序(总和为b-50,a-40,c-15)。

python pandas sorting
1个回答
2
投票

创建一个临时列_t并使用sort_values上的_t, B进行排序

In [269]: (df.assign(_t=df['A'].map(df.groupby('A')['B'].sum()))
            .sort_values(by=['_t', 'B'], ascending=False)
            .drop('_t', 1))
Out[269]:
    A   B
6   b  20
10  b  15
0   b  10
1   b   5
2   a  25
7   a  10
3   a   5
4   c   6
8   c   4
9   c   3
5   c   2

细节

In [270]: df.assign(_t=df['A'].map(df.groupby('A')['B'].sum()))
Out[270]:
    A   B  _t
0   b  10  50
1   b   5  50
2   a  25  40
3   a   5  40
4   c   6  15
5   c   2  15
6   b  20  50
7   a  10  40
8   c   4  15
9   c   3  15
10  b  15  50
© www.soinside.com 2019 - 2024. All rights reserved.