groupby 是pandas中一类非常重要的操作是数据聚合与分组运算。通过groupby方法能够实现对数据集的拆分、统计、转换等操作,这个过程一气呵成。
groupby 技术
groupby 是pandas 中非常重要的一个函数, 主要用于数据聚合和分类计算. 其思想是“split-apply-combine”(拆分 – 应用 – 合并),首先将数据分组拆分,按照组别划分。这种分组可以针对行(axis=0)或列(axis=1);然后针对分好的组别应用操作函数(聚合、统计等);最后这些结果会合并到最终对象中。这个过程如下:

groupby()有3个步骤:
- 拆分成多个组
- 分别对每个组应用函数(比如,求和、求均值等等)
- 合并
举个例子:
import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True) #处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True) #无法对齐主要是因为列标题是中文
df=pd.DataFrame({
'货号':['A','B','B','A','B'],
'平台':['淘宝','淘宝','京东','京东','淘宝'],
'销量':[1,2,3,4,5]
})
print(df)

下面我们使用‘货号’这一列作为分组
df.groupby('货号')
它就可以分成A组和B组
如果我们使用‘平台’这一列作为分组
df.groupby('平台')
它就可以分成淘宝组和京东组
如果我们同时使用‘货号’和‘平台’这2列作为分组
df.groupby(['平台','货号'])
它就会取这2列加起来的唯一值来进行分组
如:A 淘宝 是1组、 A 京东 是1组 、 B 淘宝(有2个) 是1组 、 B 京东 是1组,这样就分成了4个子组
然后分完组之后它返回的就是一个对象
例如:
df.groupby(‘货号’) #它返回的就是一个DataFrame对象
如果我取其中的1列,如:df.groupby(‘货号’)[‘销量’] #它返回的就是一个Series对象
分组之后通常可以做3件事情
1、聚合
例如:我分组之后可以进行求和运算
df.groupby('货号').sum()
2、转换 transform
例如:分组之后,把‘销量’单独拿出来求和,(我们需要新增一列来展示这个数据的时候就适合使用 transform )
df.groupby('货号')['销量'].transform('sum')
3、过滤 filter
例如:把销量大于6的货号筛选出来就可以使用这个filter函数,返回True的就会被筛选出来,返回False就会被剔除
df.groupby('货号').filter(lambda x: x['销量'].sum()>6)