基于两列生成统计列:用Pandas按性别统计观影占比
按性别统计观影人群占比的Pandas实现
需求说明
基于包含ID、gender、seen字段的Pandas DataFrame,统计不同性别中看过电影的人群占比,或是观影人群中各性别的占比(两种场景对应不同统计逻辑)。
示例数据
import pandas as pd d = {'ID': [1,2,3,4,5,6], 'gender': ['male', 'male','male','male','male','female'], 'seen': ['yes','yes','yes','yes','no','no']} df = pd.DataFrame(data=d)
解决方案
场景1:统计每个性别中看过电影的人数占该性别总人数的比例
按gender分组,计算每组内seen='yes'的人数占比:
# 按性别分组,计算观影占比并保留1位小数 gender_seen_ratio = df.groupby('gender')['seen'].apply(lambda x: (x == 'yes').mean() * 100).round(1).reset_index(name='观影占比(%)') print(gender_seen_ratio)
输出结果:
gender 观影占比(%) 0 female 0.0 1 male 80.0
场景2:统计观影人群中各性别的占比
若需求是统计所有看过电影的用户里,不同性别分别占比多少,先筛选出seen='yes'的用户再分组计算:
# 筛选看过电影的用户 seen_users = df[df['seen'] == 'yes'] # 统计各性别在观影人群中的占比,保留整数 gender_in_seen_ratio = seen_users.groupby('gender')['ID'].size().div(seen_users.shape[0]) * 100 gender_in_seen_ratio = gender_in_seen_ratio.round(0).reset_index(name='观影人群性别占比(%)') print(gender_in_seen_ratio)
输出结果:
gender 观影人群性别占比(%) 0 male 100.0
原代码问题说明
你之前的代码按seen字段分组,统计的是整体用户中看过/没看过电影的占比,未按gender维度拆分。要实现按性别划分的统计,核心是调整分组键为gender,或是先筛选目标人群再按gender分组计算占比。
内容的提问来源于stack exchange,提问作者Leonardo Urbiola
相关产品推荐
相关产品推荐

