pandas结构分析
结构分析是在分组和交叉的基础上,计算各组成部分所占的比例,进而分析总体的内部特征的一种分析方法。结构分析中的分组主要是指定性分组,定性分组一般应看结构,重点在于了解各部分占总体的比例。例如,求公司中不同学历员工所占的比例,产品在市场的占有率、股权结构等。
在结构分析时,先利用 pivot_table() 函数进行数据透视表分析,然后,通过指定 axis 参数对数据透视表按行或列进行计算(当 axis=0 时按列计算,axis=1 时按行计算)。其中,数据框的外运算函数见表 1,而数据框的内运算函数见表 2。
【例 1】对 Employee_income.xls 文件中的年龄(age)和学历(education)数据列进行结构分析,求不同年龄分层下各种学历的占比。
其示例代码 test1 如下。
运行输出结果如下。
在结构分析时,先利用 pivot_table() 函数进行数据透视表分析,然后,通过指定 axis 参数对数据透视表按行或列进行计算(当 axis=0 时按列计算,axis=1 时按行计算)。其中,数据框的外运算函数见表 1,而数据框的内运算函数见表 2。
运算 | 说明 |
---|---|
add | 加 |
sub | 减 |
multiply | 乘 |
div | 除 |
运算 | 说明 |
---|---|
sum | 求和 |
mean | 均值 |
var | 方差 |
sd | 标准差 |
【例 1】对 Employee_income.xls 文件中的年龄(age)和学历(education)数据列进行结构分析,求不同年龄分层下各种学历的占比。
其示例代码 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,70]#年龄分布状况 age_labels = ['20-29岁', '30-39岁', '40-49岁', '50-59岁','60-69岁'] df['年龄分层']=pd.cut(df.age, age_bins, right=False, labels=age_labels) ptResult = df.pivot_table( values=['age'], index=['年龄分层'], columns=['education'], aggfunc=[np.size] ) print(ptResult) print(ptResult.sum()) print(ptResult.div(ptResult.sum(axis=0), axis=1)) #div的第一个参数是除法的分母,意思是按行把数据除以该列的总和 #即得到某一个年龄分层下的学历占比。
运行输出结果如下。
size age education 大专 本科 研究生 高中 年龄分层 20-29岁 2.0 NaN NaN 4.0 30-39岁 2.0 5.0 1.0 3.0 40-49岁 NaN NaN 1.0 NaN education size age 大专 4.0 本科 5.0 研究生 2.0 高中 7.0 dtype: float64 size age education 大专 本科 研究生 高中 年龄分层 20-29岁 0.5 NaN NaN 0.571429 30-39岁 0.5 1.0 0.5 0.428571 40-49岁 NaN NaN 0.5 NaN