熊猫-具有多个输出的GroupBy

时间:2019-07-16 19:57:06

标签: python pandas group-by

我有一个这样的数据框:

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

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