如何处理Pandas DataFrame并计算性别与年龄组的组合占比乘积
问题描述
现有如下Pandas DataFrame,代表人口分布比例:
import pandas as pd df = pd.DataFrame({ 'variable': ['gender','gender', 'age_group', 'age_group'], 'category': ['F','M', 'Young', 'Old'], 'value': [0.6, 0.4, 0.7, 0.3], })
对应的表格结构:
| variable | category | value | |
|---|---|---|---|
| 0 | gender | F | 0.6 |
| 1 | gender | M | 0.4 |
| 2 | age_group | Young | 0.7 |
| 3 | age_group | Old | 0.3 |
需要计算gender与age_group的所有组合对应的人口占比(组合占比为对应分类比例的乘积,例如年轻女性占比=0.6×0.7=0.42),最终输出如下格式的DataFrame:
target_df = pd.DataFrame({ 'gender': ['F', 'F', 'M', 'M'], 'age_group': ['Young', 'Old', 'Young', 'Old'], 'percentage': [0.42, 0.18, 0.28, 0.12] })
对应的表格结构:
| gender | age_group | percentage | |
|---|---|---|---|
| 0 | F | Young | 0.42 |
| 1 | F | Old | 0.18 |
| 2 | M | Young | 0.28 |
| 3 | M | Old | 0.12 |
解决方案
可以通过以下步骤实现:
- 拆分数据:将原DataFrame按
variable字段拆分为两个独立的DataFrame,分别存储性别、年龄组的分类及对应比例 - 笛卡尔积合并:添加临时键实现两个DataFrame的全连接,得到所有分类组合
- 计算组合占比:将对应分类的比例相乘得到组合占比,最后整理成目标格式
对应的代码实现:
import pandas as pd # 原数据 df = pd.DataFrame({ 'variable': ['gender','gender', 'age_group', 'age_group'], 'category': ['F','M', 'Young', 'Old'], 'value': [0.6, 0.4, 0.7, 0.3], }) # 拆分性别和年龄组数据并重命名列 gender_df = df[df['variable'] == 'gender'].rename(columns={'category': 'gender', 'value': 'gender_pct'}) age_df = df[df['variable'] == 'age_group'].rename(columns={'category': 'age_group', 'value': 'age_pct'}) # 添加临时键用于生成笛卡尔积 gender_df['temp_key'] = 1 age_df['temp_key'] = 1 # 合并数据、计算占比并整理格式 final_df = pd.merge(gender_df, age_df, on='temp_key') \ .drop(columns=['variable_x', 'variable_y', 'temp_key']) \ .assign(percentage=lambda x: x['gender_pct'] * x['age_pct']) \ .reindex(columns=['gender', 'age_group', 'percentage']) # 打印结果 print(final_df)
运行代码后输出:
gender age_group percentage 0 F Young 0.42 1 F Old 0.18 2 M Young 0.28 3 M Old 0.12
内容的提问来源于stack exchange,提问作者quant
相关产品推荐
相关产品推荐

