首页 > 解决方案 > 按 pandas groupby 中的两个变量对数据框进行排序

问题描述

我有一个看起来像这样的 DF;

   Group     Name     Rank     Group_Sales_Total
0  A         Dave     4        10
1  A         Tom      2        10
2  A         Sara     1        10
3  A         Raul     3        10
4  B         Chris    3        20
5  B         John     4        20
6  B         Aarti    1        20
7  B         Amen     2        20

我想做的是,按每个组的每个成员各自的排名对它们进行排序,然后按它们各自的销售额对这些组进行排序。我的目标应该是这样的。

   Group     Name     Rank     Group_Sales_Total
0  B         Aarti    1        20
1  B         Amen     2        20
2  B         Chris    3        20
3  B         John     4        20
4  A         Sara     1        10
5  A         Tom      2        10
6  A         Raul     3        10
7  A         Dave     4        10

我能够使用以下方法正确排序每个组的排名;

DF.groupby('Group').apply(pd.DataFrame.sort_values, 'Rank', ascending=True).reset_index(drop=True)

但是,当我也尝试按集团销售总额对其进行排序时,排序要么不会发生,要么会打乱排名的顺序。我尝试了以下方法;

DF.groupby('Group').apply(pd.DataFrame.sort_values, ['Rank','Group_Sales_Total'], ascending=[True, False]).reset_index(drop=True)

任何有关获得输出的帮助/见解将不胜感激。

亲切的问候

标签: pandas

解决方案


 df.sort_values(['Group','Rank','Group_Sales_Total'], ascending=[False, True, False])



 Group   Name  Rank  Group_Sales_Total
6     B  Aarti     1                 20
7     B   Amen     2                 20
4     B  Chris     3                 20
5     B   John     4                 20
2     A   Sara     1                 10
1     A    Tom     2                 10
3     A   Raul     3                 10
0     A   Dave     4                 10

推荐阅读