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