python - 熊猫数据框分组和排序
问题描述
我有一个有 4 列的数据框,其中前两列由字符串(分类变量)组成,最后两列是数字。
Type Subtype Price Quantity
Car Toyota 10 1
Car Ford 50 2
Fruit Banana 50 20
Fruit Apple 20 5
Fruit Kiwi 30 50
Veggie Pepper 10 20
Veggie Mushroom 20 10
Veggie Onion 20 3
Veggie Beans 10 10
如何使数据框根据 Type 列上 Price 的聚合总和按降序排序,并且 Subtype 列也按 Price 列的降序排序?像这样:
Type Subtype Price Quantity
Fruit Banana 50 20
Kiwi 30 50
Apple 20 5
Car Ford 50 2
Toyota 10 1
Veggie Mushroom 20 10
Onion 20 3
Beans 10 10
Pepper 10 20
我尝试了以下方法,但它没有按降序对 Subtype 列进行排序:
df = df.groupby(['Type','Subtype'])['Price', 'Quantity'].agg({'Price':sum})
i = df.index.get_level_values(0)
df = df.iloc[i.reindex
(df['PRICE'].groupby(level=0,
group_keys=False).sum().sort_values('PRICE', ascending=False).index)[1]]
df.columns = df.columns.get_level_values(1)
编辑:子类型下有多个相同的项目,所以我希望类型和子类型列也分组。
解决方案
尝试:
df.assign(sortkey = df.groupby('Type')['Price'].transform('sum'))\
.sort_values(['sortkey','Type','Price'], ascending=[False,True,False])\
.set_index(['Type','Subtype'])\
.drop('sortkey', axis=1)
输出:
Price Quantity
Type Subtype
Fruit Banana 50 20
Kiwi 30 50
Apple 20 5
Car Ford 50 2
Toyota 10 1
Veggie Mushroom 20 10
Onion 20 3
Pepper 10 20
Beans 10 10
推荐阅读
- go - 如何 100% 确定 goroutine 是按条件等待的?
- c# - C# TCP连接,客户端无法向服务器发送消息
- javascript - Javascript - 在日期和时间格式之间添加逗号
- python - 在 Python 中使用 Todays Datetime 计算项目的完成情况
- vba - 脚本在过去三天内未过滤
- c - Cmockery on C 内置函数
- c# - SelectNodes 带来了许多结果
- wordpress - WSL Ubuntu 对使用 WordPress 安装的驱动器文件夹的权限(询问 FTP 凭据或 chmod 错误)
- apache-spark - 如何在 EMR 6.3 中运行的 SparkConf 中设置 spark.sql.legacy.allowUntypedScalaUDF 标志
- python - 用另一个字典的值替换字典的值