首页 > pandas 阅读数:15

pandas结构分析

< 上一页pandas交叉分析 pandas相关分析下一页 >
结构分析是在分组和交叉的基础上,计算各组成部分所占的比例,进而分析总体的内部特征的一种分析方法。结构分析中的分组主要是指定性分组,定性分组一般应看结构,重点在于了解各部分占总体的比例。例如,求公司中不同学历员工所占的比例,产品在市场的占有率、股权结构等。

在结构分析时,先利用 pivot_table() 函数进行数据透视表分析,然后,通过指定 axis 参数对数据透视表按行或列进行计算(当 axis=0 时按列计算,axis=1 时按行计算)。其中,数据框的外运算函数见表 1,而数据框的内运算函数见表 2。

表 1:数据框的外运算函数
运算 说明
add
sub
multiply
div

表 2:数据框的内运算函数
运算 说明
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
< 上一页pandas交叉分析 pandas相关分析下一页 >