python - Pandas 对多列进行排序

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

最佳答案

创建临时列_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

关于python - Pandas 对多列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48005035/

相关文章:

javascript - 如何根据每个 LI.span 中的数字对列表进行排序?

Python:如何按对象的特征或属性对对象列表进行分组?

python:在存在字符串的情况下将pandas数据框中的数值数据转换为 float

python - 使用 seaborn 为绘图添加标签

pandas - 处理 Pandas df 中 'date' (yyyymmdd) 列中每行的最后两位数字 (dd)

python - 更改主图图例标签文本

java - 对 String[][] 意外输出进行排序

Python 的 "in"集合运算符

python - 使用生成器构建矩阵

python - 使用索引迭代列