A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

# -*- coding: utf-8 -*-
#1、概念:结构分析, 是在分组(这个分组一般是定量分组,定量分组一般看结构)以及交叉的基础上,计算各组成部分所占的比重,进而分析总体的内部特征的一种分析方法。

#结构分析的结果一般以饼图呈现,如果成分较少(两个或三个),那么可以使用圆环图呈现

#下面看看在pandas中如何进行占比计算:
#当我们使用groupby计算出分组结果或者使用pivot_table对计算出交叉表的结果之后,如果我们还需要对计算的结果继续运算,可以使用数据框自带的函数进行运算。自带的函数
#有两种类型:
#外运算:主要用于两个数据框之间的运算。如add、sub、multiply、div
#内运算:主要用于数据框自身的运算。如sum、mean、var、sd

import numpy
import pandas

data = pandas.read_csv("D:/workspaces/python/pythonStudy/28.csv")

#28.csv包括列:用户ID,注册日期,身份证号码,性别,出生日期,年龄。下载地址:https://pan.baidu.com/s/1wHp1q1PgSw_HxyLW59k_Tw

bins = [min(data.年龄)-1,20,30,40,max(data.年龄)+1]

labels = ['20岁及以下','21岁到30岁','31岁到40岁','41岁以上']

data['年龄分层'] = pandas.cut(data.年龄,bins,labels=labels)

ptResult = data.pivot_table(
values = ['年龄'],
index = ['年龄分层'],
columns = ['性别'],
aggfunc = [numpy.size]
)

ptResult.sum() #可以看到默认返回按列计算的结果(因为默认axis=0,即跨行执行)

ptResult.sum(axis=0) #结算结果同上

ptResult.sum(axis=1) #返回按行计算的结果(axis=1,标识跨列执行)

#计算在各年龄层中,不同性别的各自占比
ptResult.div(ptResult.sum(axis=1),axis=0)  

#计算在各性别中,不同年龄层的各自占比
ptResult.div(ptResult.sum(axis=0),axis=1)


1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马