首页 > 解决方案 > 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

有没有更好的方法呢?

标签: pythonpandasgroup-by

解决方案


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

推荐阅读