SQL经常将聚合函数与GROUP BY进行组合,对数据进行分组统计分析,python在分析数据中也可以实现相同的功能,而且python也是用GROUPBY

首先创建一个数据表

import pandas as pd
import numpy as np

value = {'用户ID':['001','002','003','004','005','006'],
         '用户类型':['大','小','中','大','小','中'],
         '区域':['A','B','A','C','B','A'],
         '7月销量':[50,60,75,100,120,130],
         '7月销售额':[500,1200,2250,1100,3600,5200]}
df = pd.DataFrame(value)

1.groupby()

最重要的参数为by

  • 如果是基于单列进行分组,括号中可以填入列名,如'用户类型',也可以填入Series,如df['用户类型']
  • 如果是基于多列进行分组,括号中可以填入列名组成的列表,如["用户类型","区域"],也可以填入Series组成的列表,如[df["用户类型"],df["区域"]

其他参数根据情况,一般默认即可, axis=0, level=None,as_index=True,sort = True, group_keys= True,  observed= False, dropna= True

2.选择列

df.groupby()生成的也是DataFrame,有时可能需要在统计分析前选择列,可按照筛选列的方法进行操作,具体见https://blog.csdn.net/Monkey_wang_/article/details/116156599,不设置筛选时,默认是选择全部列

例如你只需要对7月销售额进行统计分析,可以写成df.groupby("用户类型")["7月销售额"]

3.统计函数

常见统计函数包括mean,sum,count,max,min等

  • 对选择出来的列进行单一统计
df.groupby(['用户类型','区域']).sum()
  7月销量7月销售额
用户类型区域  
A2057450
A50500
C1001100
B1804800
  • 对选择出来的列进行多种统计,此时需要借助aggregate方法,对分组后选择的列同时进行多种统计
df.groupby(['用户类型','区域']).aggregate(['sum','count'])
  用户ID7月销量7月销售额
  sumcountsumcountsumcount
用户类型区域      
A0030062205274502
A00115015001
C0041100111001
B0020052180248002
  • 对选择出来的列,不同列进行不同的统计,如一个列进行求和,一个列进行求平均,仍需要借助aggregate方法,不过这个时候需要传入以列名为键,统计函数为值的字典
df.groupby(['用户类型','区域']).aggregate({'7月销量':'sum','7月销售额':'mean'})
  7月销量7月销售额
用户类型区域  
A2053725
A50500
C1001100
B1802400

 

4.索引处理

默认以分组中的某列或某些列为索引,但有时候我们并不想要这样的索引,此时有两种方法处理:

  • 将groupby()中的参数as_index设置为False,即as_index=False
df.groupby('用户类型',as_index=False).sum()
  • 通过reset_index()重置索引
df.groupby('用户类型').sum().reset_index()

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐