python - Pandas - 具有多个输出的 GroupBy
问题描述
我有一个这样的数据框:
CITY LOCATION PRODUCT
CHICAGO CHI1 A
CHICAGO CHI1 B
CHICAGO CHI4 C
NEWYORK NY1 D
NEWYORK NY2 E
NEWYORK NY2 F
NEWYORK NY2 G
ATLANTA ATL1 H
ATLANTA ATL1 I
我想根据同一分组获得 2 个不同的统计数据。分组为 [CITY, LOCATION]。我希望能够获取每个位置的产品数量以及该位置的第一个产品的名称(按字母顺序)。
结果将是:
CITY LOCATION FIRST COUNT
CHICAGO CHI1 A 2
CHICAGO CHI4 C 1
NEWYORK NY1 D 1
NEWYORK NY2 E 3
ATLANTA ATL1 H 2
我设法做到这一点的唯一方法是:
gb = data.groupby(['CITY', 'LOCATION'])
df = gb.max().join(other=gb.count(), how='left', on=['CITY', 'LOCATION'], rsuffix='_r')
但我确信有更好的方法可以重复使用相同的 groupby() 对象,而无需加入 2 个数据帧。
类似于 SQL 的东西:
SELECT city, location, max(product), count(product) FROM table GROUP BY city, location
有没有更好的方法呢?
解决方案
agg
df.groupby(['CITY', 'LOCATION'], sort=False).PRODUCT.agg(['min', 'count']).reset_index()
CITY LOCATION min count
0 CHICAGO CHI1 A 2
1 CHICAGO CHI4 C 1
2 NEWYORK NY1 D 1
3 NEWYORK NY2 E 3
4 ATLANTA ATL1 H 2
推荐阅读
- vue.js - VueJS 从 ipcRenderer (ElectronJS) 获取“未定义”数据
- typescript - 调用 api 不起作用 nextjs getinitialprops
- gcloud - 无法在 Google Cloud 中启动服务器:选择您的键盘布局
- python - 有没有办法将子类添加到反射的 flask-sqlalchemy 表中
- insert - 在 DB2 中将数据插入到具有用户定义数据类型的列中
- mysql - 如何避免在 MySQL 的公用表表达式中重复代码?
- reactjs - 在一个子域中出现 React Cors 问题,但在另一个子域中没有
- jquery - 如何使用变量名
- pymongo - 我可以将 MOTOR 用于 mongoengine 吗?
- python - 使用 JSON 列表更新数据库