You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理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],
})

对应的表格结构:

variablecategoryvalue
0genderF0.6
1genderM0.4
2age_groupYoung0.7
3age_groupOld0.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]
})

对应的表格结构:

genderage_grouppercentage
0FYoung0.42
1FOld0.18
2MYoung0.28
3MOld0.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:47:31