数据聚合

在线刷题

检查 or 强化 Pandas 数据分析操作?👉在线体验「Pandas进阶修炼300题」

Note

本页面代码可以在线编辑、执行

数据聚合可以在数据分组的基础上,进一步对不同列采取不同的计算规则,例如查看不同地区的员工薪资最大、最小、均值以及工作年限的均值,过程图解如下

https://pic.liuzaoqi.com/picgo/202112231931438.png

下面是更多相关案例,你可以修改相关代码来验证自己的想法!

本页数据说明

为了更好的介绍相关操作,本页面使用 某招聘网站数据.csv 数据进行展开,你应该对数据字段、数值、类型等相关信息做一个大致了解!

import pandas as pd
pd.set_option('display.max_colwidth',8)
df = pd.read_csv("某招聘网站数据.csv",parse_dates=['createTime'])
df.head()
positionName companySize industryField financeStage companyLabelList firstType secondType thirdType createTime district salary workYear jobNature education positionAdvantage imState score matchScore famousCompany
0 数据分析 50-150人 移动互联... A轮 ['绩效... 产品|需... 数据分析 数据分析 2020-... 余杭区 37500 1-3年 全职 本科 五险一金... today 233 15.1... False
1 数据建模 150-... 电商 B轮 ['年终... 开发|测... 数据开发 建模 2020-... 滨江区 15000 3-5年 全职 本科 六险一金... disa... 176 32.5... False
2 数据分析 2000人以上 移动互联... 上市公司 ['节日... 产品|需... 数据分析 数据分析 2020-... 江干区 3500 1-3年 全职 本科 五险一金... today 80 14.9... False
3 数据分析 500-... 电商 D轮及以上 ['生日... 开发|测... 数据开发 数据分析 2020-... 江干区 45000 3-5年 全职 本科 年终奖等 thre... 68 12.8... True
4 数据分析 2000人以上 物流丨运输 上市公司 ['技能... 产品|需... 数据分析 数据分析 2020-... 余杭区 30000 3-5年 全职 大专 五险一金 disa... 66 12.7... True

聚合统计

计算指标

分组计算不同行政区,薪水的最小值、最大值和平均值

import numpy as np
df.groupby('district')['salary'].agg([min, max, np.mean])
min max mean
district
上城区 22500 30000 2625...
下沙 30000 30000 3000...
余杭区 7500 60000 3358...
拱墅区 24000 30000 2850...
江干区 3500 45000 2525...
滨江区 7500 50000 3142...
萧山区 25000 45000 3625...
西湖区 6500 45000 3089...

修改列名

将上一题的列名(包括索引名)修改为中文

df.groupby('district').agg(最低工资=('salary', 'min'), 最高工资=(
    'salary', 'max'), 平均工资=('salary', 'mean')).rename_axis(["行政区"])
最低工资 最高工资 平均工资
行政区
上城区 22500 30000 2625...
下沙 30000 30000 3000...
余杭区 7500 60000 3358...
拱墅区 24000 30000 2850...
江干区 3500 45000 2525...
滨江区 7500 50000 3142...
萧山区 25000 45000 3625...
西湖区 6500 45000 3089...

组合计算

对不同岗位(positionName)进行分组,并统计其薪水(salary)中位数和得分(score)均值

df.groupby('positionName').agg({'salary': np.median, 'score': np.mean})
salary score
positionName
BI数据分析师 20000 2.66...
bi数据分析师 40000 5.00...
业务与数据分析师 30000 3.00...
产品经理/数据分析(核心业务)-2020届春招 60000 3.00...
产品运营(偏数据分析) 27500 15.0...
商业数据分析 35000 0.00...
商业数据分析师 37500 5.00...
商业数据分析师(阿里数据银行) 22500 3.00...
大数据分析工程师(J11108) 30000 17.0...
大数据建模总监 37500 14.0...
奔驰·耀出行-BI数据分析专家 30000 0.00...
奔驰耀出行-战略数据分析师 42500 1.00...
店铺数据分析师 30000 6.00...
数据分析 30000 82.7...
数据分析-2020届春招 30000 4.00...
数据分析专员 26250 3.00...
数据分析专家 31250 8.16...
数据分析专家-LQ(J181203029) 21500 0.00...
数据分析专家03-10-217 23750 4.50...
数据分析专家(游戏业务) 37500 12.0...
数据分析实习生 40000 4.00...
数据分析实习生 (MJ000087) 26500 3.00...
数据分析工程师 20000 16.0...
数据分析师 37500 6.50...
数据分析师 (MJ000250) 27500 4.50...
数据分析师(J10147) 37500 3.00...
数据分析师-Lark 30000 2.00...
数据分析师-企业SaaS应用 40000 2.00...
数据分析师/BI 45000 5.00...
数据分析师(保险)13-01-19 40000 4.00...
数据分析师(社招) 30000 15.0...
数据分析师(财务方向) 37500 5.00...
数据分析建模工程师 30000 0.00...
数据分析建模工程师(校招) 36500 0.00...
数据分析经理 30000 6.50...
数据分析负责人 or 数据分析师 30000 4.00...
数据建模 15000 176....
数据建模专家-杭州-01546 30000 12.0...
数据建模工程师 36250 24.0...
旅游大数据分析师(杭州) 30000 1.00...
智能数据分析引擎研发专家 30000 3.00...
浙江数据分析师 37500 5.00...
解决方案顾问/数据分析师 25000 4.50...
财务数据分析师 37500 4.50...
资深数据分析/数据分析专家G00796 45000 4.00...
资深数据分析专员 30000 1.00...
资深数据分析师 30000 6.66...
资深数据分析师 (MJ000088) 25000 4.00...
资深数据分析师(商品方向)G01053 45000 4.00...
资深数据分析师(杭州) 37500 15.0...
金融数据分析师 22500 5.00...
银行数据分析岗 50000 5.00...
高级数据分析专员 22500 4.00...
高级数据分析师 30000 3.66...
高级财务数据分析师 28750 4.50...

多层统计

对不同行政区进行分组,并统计薪水的均值、中位数、方差,以及得分的均值

df.groupby('district').agg(
    {'salary': [np.mean, np.median, np.std], 'score': np.mean})
salary score
mean median std mean
district
上城区 2625... 26250 5303... 2.00...
下沙 3000... 30000 NaN 6.00...
余杭区 3358... 30000 1085... 15.1...
拱墅区 2850... 30000 3000... 2.75...
江干区 2525... 26250 1725... 39.2...
滨江区 3142... 30000 1044... 12.9...
萧山区 3625... 37500 1030... 18.2...
西湖区 3089... 30000 7962... 8.06...

自定义函数

在 18 题基础上,在聚合计算时新增一列计算最大值与平均值的差值

def myfunc(x):

    return x.max()-x.mean()

df.groupby('district').agg(最低工资=('salary', 'min'), 最高工资=(
    'salary', 'max'), 平均工资=('salary', 'mean'), 最大值与均值差值=('salary', myfunc)).rename_axis(["行政区"])
最低工资 最高工资 平均工资 最大值与均值差值
行政区
上城区 22500 30000 2625... 3750...
下沙 30000 30000 3000... 0.00...
余杭区 7500 60000 3358... 2641...
拱墅区 24000 30000 2850... 1500...
江干区 3500 45000 2525... 1975...
滨江区 7500 50000 3142... 1857...
萧山区 25000 45000 3625... 8750...
西湖区 6500 45000 3089... 1410...