我有一个这样的数据框:
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
有更好的方法吗?
答案 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