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

如何在Pandas中将长格式DataFrame转换为宽格式

Pandas长格式转宽格式实现方案

针对你给出的长格式DataFrame,我们可以通过Pandas的pivot方法结合列名整理来实现转换,具体步骤如下:

1. 构造示例数据(可直接复用测试)

先还原你的DataFrame结构:

import pandas as pd

data = {
    'GEO_NAME': ['60010188']*5,
    'CHARACTERISTIC_NAME': ['0 to 14 years', '15 to 19 years', '20 to 24 years', '25 to 29 years', '30 to 34 years'],
    'C1_COUNT_TOTAL': [105.0, 30.0, 20.0, 35.0, 35.0],
    'C2_COUNT_MEN+': [50.0, 15.0, 10.0, 15.0, 15.0],
    'C3_COUNT_WOMEN+': [50.0, 15.0, 15.0, 20.0, 20.0]
}
df = pd.DataFrame(data)

2. 执行转换操作

核心是用pivot将行维度的CHARACTERISTIC_NAME转为列维度,再合并多层列名:

# 1. 执行pivot,生成多层列结构
pivoted_df = df.pivot(index='GEO_NAME', columns='CHARACTERISTIC_NAME')

# 2. 整理列名:将(计数类型, 年龄组)的结构转为"年龄组_计数类型"
# 定义原列名到目标后缀的映射
col_mapping = {
    'C1_COUNT_TOTAL': 'TOTAL',
    'C2_COUNT_MEN+': 'MEN',
    'C3_COUNT_WOMEN+': 'WOMEN'
}
# 合并多层列名
pivoted_df.columns = pivoted_df.columns.map(lambda x: f"{x[1]}_{col_mapping[x[0]]}")

# 3. 重置索引,让GEO_NAME回到普通列
final_df = pivoted_df.reset_index()

3. 转换结果

执行后得到的final_df结构如下:

GEO_NAME  0 to 14 years_TOTAL  0 to 14 years_MEN  0 to 14 years_WOMEN  15 to 19 years_TOTAL  15 to 19 years_MEN  15 to 19 years_WOMEN  20 to 24 years_TOTAL  20 to 24 years_MEN  20 to 24 years_WOMEN  25 to 29 years_TOTAL  25 to 29 years_MEN  25 to 29 years_WOMEN  30 to 34 years_TOTAL  30 to 34 years_MEN  30 to 34 years_WOMEN
0  60010188                105.0               50.0                 50.0                  30.0                 15.0                   15.0                  20.0                 10.0                   15.0                  35.0                 15.0                   20.0                  35.0                 15.0                   20.0

关键说明

  • 如果你的DataFrame包含多个GEO_NAME,该方法同样适用,每个地理区域会自动合并为一行
  • 若存在重复的GEO_NAME+CHARACTERISTIC_NAME组合,可改用pivot_table并指定聚合函数(如aggfunc='sum')处理重复值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:28:11