python - Python pandas如何在一直存储密钥的同时进行分组
问题描述
我有一个名为“数据”的数据框,我想根据多个键对其进行分组和求和:
NAME ORDER COST
Joe Burger 10
Joe Burger 12
Jill Fries 5
Joe Nachos 8
我跑
data = data.groupby(['NAME','ORDER'])['COST'].sum()
得到这个:
NAME ORDER COST
Joe Burger 22
Nachos 8
Jill Fries 5
但我失去了他们在第二排的关键“乔”。我希望数据框保留所有键,这样如果 Joe 有多个汉堡订单,它将以 Joe 开头,如下所示:
NAME ORDER COST
Joe Burger 22
Joe Nachos 8
Jill Fries 5
类似的数据框初始化:df = pd.DataFrame({'NAME': ['Joe', 'Jill', 'Joe', 'Joe'], 'ORDER': ['burger', 'fries', 'burger', ' Ube'], 'COST': [1, 2, 3, 6]})
解决方案
groupby 聚合的输出是具有 MultiIndex 的数据帧,包括与使用的分组器一样多的级别(在这种情况下为 2:'NAME' 和 'ORDER')
您的新数据框在第二行仍然有那个“乔”,只是在print
. 看这里
data = data.groupby(['NAME', 'ORDER']).COST.sum()
>>> print(data)
NAME ORDER
Jill Fries 5
Joe Burger 22
Nachos 8
Name: COST, dtype: int64
>>> print(data.index)
MultiIndex([('Jill', 'Fries'),
( 'Joe', 'Burger'),
( 'Joe', 'Nachos')],
names=['NAME', 'ORDER'])
>>> print(data.loc[('Joe', 'Nachos')])
8
实际上data
现在是一个系列(不是数据框),因为您从 groupby 对象中只选择了一个列。
推荐阅读
- python - Heroku 部署中的 Cassandra 连接问题
- firebase - 如何通过firebase搜索
- git - 从 github 桌面提交更改时,我收到一条错误消息:“警告:LF 将在 author/test/index.html 中被 CRLF 替换”
- linux - docker入口点中的权限被拒绝
- python - Django 上的 MakeMigration 错误 - ImportError:无法导入名称“UserProfile”
- django - Django m2m_changed 在 post_clear 上清除对象
- c# - 如何获取当前目录中的列表显示文件夹?
- spring - 当 spring Vault 更新令牌不起作用时重新启动 pod
- android - 单个片段中的多个 LiveData 观察者
- css - 媒体查询行为不准确