python表格数据分组

153 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

数据分组

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)

image.png

1.groupby()

最重要的参数为by

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

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

df.groupby(by='7月销量')

image.png

2. 统计函数

  1. 常见统计函数包括mean,sum,count,max,min等
 df.groupby(['用户类型','区域']).sum()

image.png

  1. 对选择出来的列进行多种统计,此时需要借助aggregate方法,对分组后选择的列同时进行多种统计
 df.groupby(['用户类型','区域']).aggregate(['sum','count'])

image.png

  1. 对选择出来的列,不同列进行不同的统计,如一个列进行求和,一个列进行求平均,仍需要借助aggregate方法,不过这个时候需要传入以列名为键,统计函数为值的字典
 df.groupby(['用户类型','区域']).aggregate({'7月销量':'sum','7月销售额':'mean'})

image.png

3.索引处理

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

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

image.png

  • 通过reset_index()重置索引
   df.groupby('用户类型').sum().reset_index()

image.png