Press "Enter" to skip to content

Pandas中数据聚合与分组运算:groupby()分组函数的用法

groupby 是pandas中一类非常重要的操作是数据聚合与分组运算。通过groupby方法能够实现对数据集的拆分、统计、转换等操作,这个过程一气呵成。

groupby 技术

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

groupby()有3个步骤:

  1. 拆分成多个组
  2. 分别对每个组应用函数(比如,求和、求均值等等)
  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)

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注