pandas - 按 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)
任何有关获得输出的帮助/见解将不胜感激。
亲切的问候
解决方案
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
推荐阅读
- javascript - 将日期/时间控件初始化为用户时区中的当前日期/时间
- android - 关于当前网络的自适应目标 IP 以访问自己的 linux 和 android 托管服务
- visual-c++ - 从 CArchive 文件中检索信息
- mysql - 如果我没有更新该列,则在 MySQL 触发器中获取 NEW.colname 的现有值
- redis - RedisTimeSeries 是免费的还是开源的?
- javascript - 匹配没有连续字符的正则表达式
- python - 如何创建一个打印 a 和 b 但不打印 3 个连续字母的函数
- qt - 如何在 CLion 中使用 LD_LIBRARY_PATH 以运行 Qt 测试
- sql - 如何在 SQL 中的特定字符后用子字符串替换字段?
- reactjs - Email JS + AntD 的问题