当前位置: 移动技术网 > IT编程>脚本编程>Python > Pandas聚类分组处理(Grouping)

Pandas聚类分组处理(Grouping)

2020年07月03日  | 移动技术网IT编程  | 我要评论
分组(Group)的理解处理数据时,在一个数据列表中会以某一列的元素作为参考基点,统计该列中每个不重复元素对应其他列的相关数据,这里可能我描述的比较复杂,可以通过下面两张表格数据处理前后帮助理解:源数据为5列,分别为 age、gender、occupation、zip_code;下面我需要对 occupation (职业)这一列进行分组分析、统计一下每类职业对应 gender、age 的最大、最小、平均值,处理结果如下:以上就是聚类分组的简单介绍,Pandas 包里提供了函数 goupby 进

分组(Group)的理解

处理数据时,在一个数据列表中会以某一列的元素作为参考基点,统计该列中每个不重复元素对应其他列的相关数据,这里可能我描述的比较复杂,可以通过下面两张表格数据处理前后帮助理解:

源数据为5列,分别为 age、gender、occupation、zip_code;

Snipaste_2020-06-25_09-52-52.png

下面我需要对 occupation (职业)这一列进行分组分析、统计一下每类职业对应 gender、age 的最大、最小、平均值,处理结果如下:

Snipaste_2020-06-25_09-51-40.png

以上就是聚类分组的简单介绍,Pandas 包里提供了函数 goupby 进行日常操作,本文将基于 Pandasgroupby 的用法做一个简单了解

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 三列作为分析对象;

1.png

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

1_1.png

3,在2 的前提下,统计每类职业中的男性比例

value_counts() 统计某一列样本总数

a = users.groupby("occupation").gender_n.sum()/users.occupation.value_counts()*100
a.sort_values(ascending =False)

然后从大到小进行排序

2.png

4,以 occupation 作为分组基点,统计每类职业年龄最大、最小、平均值

这里用到 agg() 函数,起到数据管道聚类效果

users.groupby("occupation").age.agg(["min","max","mean"])

3_1.png

对多列数据同时进行统计时,也是用 agg() 函数,区别是这里用的是字典形式(dict):键名为列名,键值为需要统计的数据类别例如 max、min、mean、count 等关键字,以列表形式写入;

users.agg({列名:[“mean”,“max”,“min”]})

以本文数据为准,想同时查看年龄,性别的统计数据,可用下面命令;

users.groupby("occupation").agg({"age":['mean','max','min'],'gender_n':['sum','count']})

3.png

5,多列分组聚类

上面我们对 occupation 这一列进行了分组聚类分析,这里在 occupation 分组中再对 性别进行分组聚类,并统计各个职业中各性别占比总数

groupby([‘列名1’,‘列名2’…]) # 列名的先后顺序代表的分组聚类的先后顺序:

# 求在每个职业中男女各占比例
gender_occp = users.groupby(["occupation","gender"]).agg({"gender":"count"})
gender_occp

5_1.png

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 方法相似

最终结果如下:

3_1.png

以上就是本篇基本内容啦,最后感谢阅读!

本文地址:https://blog.csdn.net/weixin_42512684/article/details/107081916

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网