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

如何使用pandas的groupby/pivot功能实现指定DataFrame的结构转换

数据转换实现方案

完全可以通过pivot透视表或者groupby配合自定义函数实现需求,两种常用实现方式如下:

方法1:pivot透视表实现(写法更简洁)

直接通过透视操作将长表转为宽表,再计算性别比值即可:

import pandas as pd

# 构造和你结构一致的测试数据
df = pd.DataFrame({
    'Year': [2018, 2018, 2019, 2019],
    'Gender': ['Female', 'Male', 'Female', 'Male'],
    'Count': [4010, 19430, 3212, 16138]
})

# 长表转宽表
res = df.pivot(index='Year', columns='Gender', values='Count').reset_index()
# 计算Ratio保留2位小数
res['Ratio'] = (res['Female'] / res['Male']).round(2)
# 调整列顺序匹配要求的输出格式
res = res[['Year', 'Male', 'Female', 'Ratio']]

print(res)

输出结果和你要求的完全一致:

Year   Male  Female  Ratio
0  2018  19430    4010   0.21
1  2019  16138    3212   0.20

方法2:groupby + 自定义聚合实现(扩展性更强)

如果后续需要增加更多分组聚合逻辑,可以用groupby配合自定义函数实现:

def group_agg(group):
    male = group.loc[group['Gender'] == 'Male', 'Count'].iloc[0]
    female = group.loc[group['Gender'] == 'Female', 'Count'].iloc[0]
    return pd.Series({
        'Male': male,
        'Female': female,
        'Ratio': round(female/male, 2)
    })

res = df.groupby('Year', group_keys=False).apply(group_agg, include_groups=False).reset_index()
print(res)

两种方案都可以实现你的转换需求,根据实际场景选择即可。


内容的提问来源于stack exchange,提问作者user12460992

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:36:07