首页 > pandas 阅读数:30

pandas分布分析

< 上一页pandas分组分析 pandas交叉分析下一页 >
分布分析是指根据分析的目的,将定量数据进行等距或者不等距的分组,从而研究各组分布规律的一种分析方法。如学生成绩分布、用户年龄分布、收入状况分布等。

分布分析 cut() 函数的语法格式如下:

pandas.cut(x, bins, right=True, labels=None, retbins=False,precision=3, include_lowest=False)

函数中的参数说明如下:
  • x:进行划分的一维数组;
  • bins:取整数值,表示将 x 划分为多少个等距的区间。取序列值,表示将 x 划分在指定序列中,若不在该序列中,则是 NaN;
  • right:分组时是否包含右端点,默认为 True(包含);
  • labels:分组时是否用自定义标签来代替返回的 bins,可选项,默认为 NULL;
  • precision:表示精度,默认为 3;
  • include_lowest:分组时是否包含左端点,默认为 False(不包含)。

在分布分析时,首先用 cut() 函数确定分布分析中的分层,然后再用 groupby() 函数实现分组分析。

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

其示例代码 test1 如下。
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
df = pd.read_excel('d:\data\emp_income\Employee_income.xls', sheet_name='emp_income')
#年龄分布状况
age_bins = [20,30,40,50,60]
age_labels = ['20-30岁', '31-40岁', '41-50岁', '51-60岁']
df['年龄分层']=pd.cut(df.age, age_bins,labels=age_labels)
#分组统计人数、平均月薪、最高月薪和最低月薪
aggResult = df.groupby(by=['年龄分层'])['salary'].agg({
             '人数': np.size,
             '平均月薪':np.mean,
             '最高月薪':np.max,
             '最低月薪':np.min
})
print(aggResult)

运行输出结果如下。
         人数    平均月薪    最高月薪 最低月薪
年龄分层
20-30岁  8.0  3287.500000  5000.0  2000.0
31-40岁  9.0  4144.444444  6500.0  2500.0
41-50岁  1.0  7699.000000  7699.0  7699.0
51-60岁  NaN          NaN     NaN     NaN
< 上一页pandas分组分析 pandas交叉分析下一页 >