熊猫排序多列

时间:2017-12-28 09:40:01

标签: python pandas sorting

我有以下数据框

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)。

1 个答案:

答案 0 :(得分: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