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

如何在Pandas中按特定格式透视转换DataFrame?

解决Pandas DataFrame的透视转换需求

嘿,这个需求其实就是把行和列的角色互换,同时把原来的GROUP列拆出来作为新的行索引,用Pandas的内置方法就能快速实现,我给你具体的操作步骤和代码:

1. 先模拟原始数据(方便你测试复现)

import pandas as pd

# 构造和你结构一致的原始DataFrame
data = {
    "AGE": ["00-04", "05-17", "18-25"],
    "GROUP-A": [77, 117, 64],
    "GROUP-Q": [133, 106, 110]
    # 其他GROUP列(比如GROUP-B到GROUP-P)可以直接补充在这里
}
df = pd.DataFrame(data)

2. 方法一:melt + pivot组合(更通用,适合复杂场景)

这是最稳妥的做法,无论你有多少个GROUP列都能自动适配:

# 第一步:把宽表转成窄表,保留AGE作为标识列
melted_df = df.melt(
    id_vars="AGE",  # 固定保留的列
    var_name="GROUP",  # 原GROUP列名会被放到这个新列里
    value_name="VALUE"  # 原GROUP列的数值会被放到这个新列里
)

# 去掉GROUP列的前缀"GROUP-",只保留A/Q等分组标识
melted_df["GROUP"] = melted_df["GROUP"].str.replace("GROUP-", "")

# 第二步:把窄表转回目标格式的宽表
result_df = melted_df.pivot(
    index="GROUP",  # 把GROUP作为行
    columns="AGE",  # 把AGE作为列
    values="VALUE"  # 填充的数值
).reset_index()

# 去掉自动生成的列索引名称(避免输出时顶部有"AGE"字样)
result_df.columns.name = None

3. 方法二:直接转置(更简洁,适合简单场景)

如果你的数据结构很规整,用transpose转置后微调即可:

# 先把AGE设为索引,然后转置,再重置索引
transposed_df = df.set_index("AGE").transpose().reset_index()

# 重命名列:第一列改为GROUP,后续列用原AGE的取值
transposed_df.columns = ["GROUP"] + list(df["AGE"])

# 同样去掉GROUP列的前缀
transposed_df["GROUP"] = transposed_df["GROUP"].str.replace("GROUP-", "")

最终输出结果

两种方法都会得到你想要的结构:

GROUP  00-04  05-17  18-25
0     A     77    117     64
1     Q    133    106    110

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:42