首页 > pandas 阅读数:25

pandas分组分析

分组分析是指根据分组字段,将分析对象划分成不同的部分,以对比分析各组之间差异性的分析方法。分组分析常用的统计指标是计数、求和、平均值。

分组统计函数的语法格式如下:

groupby(by=[分组列1,分组列2,…])
        [统计列1,统计列2,…]
          .agg({统计列别名1:统计函数1,统计列别名2:统计函数2,…})

函数中的参数说明如下:
  • by:用于分组的列;
  • 中括号[ ]:用于统计的列;
  • agg:统计别名用于显示统计值的名称,统计函数用于统计数据,常用的统计函数有计数(size)、求和(sum)和均值(mean)。

【例 1 】在 Employee_income.xls 文件中包含有职工号(emp_id)、性别(sex)、年龄(age)、学历(education)、参加工作时间(firstjob)、工作地区(region)、行业(industry)、职业(occupation)、月薪(salary)和月补贴(subsidy)等 10 列数据,要求分别按年龄、学历分组统计人数,并求月薪的均值、最大值和最小值。

其示例代码 test1 如下。
# -*- coding: utf-8 -*-
import numpy as np
from pandas import DataFrame;
import pandas as pd
df = pd.read_excel('d:\data\emp_income\Employee_income.xls', sheet_name='emp_income')
age_result = df.groupby(by=['age'])['salary'].agg({
     '人数':np.size,
     '平均月薪':np.mean,
     '最高月薪':np.max,
     '最低月薪':np.min
})
print(age_result)
edu_result = df.groupby(by=['education'])['salary'].agg({
     '人数':np.size,
     '平均月薪':np.mean,
     '最高月薪':np.max,
     '最低月薪':np.min
})
print(edu_result)

运行输出结果如下。
            人数   平均月薪   最高月薪    最低月薪
education
大专          4  3700.000000  4500       3000
本科          5  4700.000000  5000       4500
研究生        2  7099.500000  7699       6500
高中          7  2685.714286  3500       2000