Python 熊猫-具有多个输出的GroupBy

Python 熊猫-具有多个输出的GroupBy,python,pandas,group-by,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

我有这样一个数据帧:

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
我想根据相同的分组得到两个不同的统计数据。 分组为[城市、位置]。我希望能够获得每个位置的产品数量以及该位置的第一个产品的名称(按字母顺序)

结果将是:

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()对象,而不必连接两个数据帧

类似于SQL:

SELECT city, location, max(product), count(product) FROM table GROUP BY city, location
有更好的方法吗?

agg
或者
agg(['first',count'])
如名称所示?OP称为“第一个产品(按字母顺序)”。使用
“min”
可确保。
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