点击上方 Z先生点记,加为星标
第一时间收到 Python 技术干货!
分组(Group)的理解
处理数据时,在一个数据列表中会以某一列的元素作为参考基点,统计该列中每个不重复元素对应其他列的相关数据,这里可能我描述的比较复杂,可以通过下面两张表格数据处理前后帮助理解:
源数据为5列,分别为 age、gender、occupation、zip_code;
下面我需要对 occupation (职业)这一列进行分组分析、统计一下每类职业对应 gender、age 的最大、最小、平均值,处理结果如下:
以上就是聚类分组的简单介绍,Pandas 包里提供了函数 goupby 进行日常操作,本文将基于 Pandas 的 groupby 的用法做一个简单了解
1,库导入,数据读取
import pandas as pd
users = pd.read_table("https://raw.githubusercontent.com/justmarkham/DAT8/master/data/u.user",sep ="|",index_col = 'user_id')
users.head()
数据以 age,gender,occupation ,zip_code 作为一条样本存入数据集中,接下来的处理将围绕 age,gender,occupation 三列作为分析对象;
2,把 gender 转化为编码形式
def gender_to_numric(x):
if x=='M':
return 1
if x =="F":
return 0
# 利用新的函数创建新的列;
users['gender_n'] = users['gender'].apply(gender_to_numric)
users
F 变为 0,M 设为 1
3,在2 的前提下,统计每类职业中的男性比例
value_counts() 统计某一列样本总数
a = users.groupby("occupation").gender_n.sum()/users.occupation.value_counts()*100
a.sort_values(ascending =False)
然后从大到小进行排序
4,以 occupation 作为分组基点,统计每类职业年龄最大、最小、平均值
这里用到 agg() 函数,起到数据管道聚类效果
users.groupby("occupation").age.agg(["min","max","mean"])
对多列数据同时进行统计时,也是用 agg() 函数,区别是这里用的是字典形式(dict):键名为列名,键值为需要统计的数据类别例如 max、min、mean、count 等关键字,以列表形式写入;
users.agg({列名:[“mean”,“max”,"min"]})
以本文数据为准,想同时查看年龄,性别的统计数据,可用下面命令;
users.groupby("occupation").agg({"age":['mean','max','min'],'gender_n':['sum','count']})
5,多列分组聚类
上面我们对 occupation 这一列进行了分组聚类分析,这里在 occupation 分组中再对 性别进行分组聚类,并统计各个职业中各性别占比总数
groupby(['列名1','列名2'…]) # 列名的先后顺序代表的分组聚类的先后顺序:
# 求在每个职业中男女各占比例
gender_occp = users.groupby(["occupation","gender"]).agg({"gender":"count"})
gender_occp
6,在 5 的基础上,统计每个职业中性别占比比例
统计每个职业中性别占比基本思路如下:
1,统计每个职业中各性别数;
2,统计每个职业中总样本数;
1 和 2 基于 occupation 这一列进行除法运算;
代码部分
# 求在每个职业中男女各占比例
gender_occp = users.groupby(["occupation","gender"]).agg({"gender":"count"})
# 为每一个职业计算 count
occup_count = users.groupby(['occupation']).agg("count")
# gender_occp
# 进行除法运算
occup_gender = gender_occp.div(occup_count,level = "occupation")*100
# 只筛选出 gender列
occup_gender.loc[:,'gender']
这里用到 DataFram.div 函数 ,对两个 DataFrame 基于某一列作为参照列做除法,最终得到的数据类型为 float ;level 参数用于指定参考列;除了 div 之外,Pandas 还提供 add、sub、mul、pow 等运算操作函数,用法与 div 方法相似
结果如下:
以上就是本篇基本内容啦,最后感谢阅读!
有什么疑问,可以扫描下方二维码加我微信
欢迎交流探讨!
推荐阅读:
本文分享自微信公众号 - Z先生点记(gh_683d048a482a)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4506734/blog/4471472