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

Pandas DataFrame reshape操作:如何从单列生成多个列

pandas DataFrame宽表转指定长表结构实现方案

你需要做的是典型的宽格式转长格式reshape操作,根据你给出的原始/目标结构,可直接按以下方法实现:


方法1:wide_to_long(列名有规则时优先用,代码最简洁)

如果你的待转换列名有统一的命名规则(比如身高_男、体重_男、身高_女、体重_女这类「值字段_维度值」格式),直接用pandas内置的wide_to_long方法一步到位:

import pandas as pd

# 参数按你实际表结构替换即可
result = pd.wide_to_long(
    df = 你的原始DataFrame,
    stubnames = ["身高", "体重"],  # 填入要作为输出列的值字段前缀
    i = ["班级", "年级"], # 填入所有不需要转置、固定保留的标识列
    j = "性别", # 填入转置后存储原列名后缀的维度列名
    sep = "_", # 列名前缀和后缀的分隔符,按你实际列名规则修改
    suffix = ".+"
).reset_index()

方法2:melt+pivot组合(列名无统一规则时用,灵活性最高)

如果列名没有统一分隔/命名规则,用打平后再转置的通用方案:

# 1. 先把所有非标识列打平为长表
df_melt = 你的原始DataFrame.melt(
    id_vars = ["班级", "年级"], # 固定保留的标识列
    var_name = "temp_col",
    value_name = "value"
)

# 2. 拆分原列名为值字段名、维度值,拆分逻辑按你实际列名改
df_melt[["指标名", "维度值"]] = df_melt["temp_col"].apply(lambda x: 你自己的列名拆分逻辑).tolist()

# 3. 把指标名转回单独列,得到最终结构
result = df_melt.pivot(
    index = ["班级", "年级", "维度值"],
    columns = "指标名",
    values = "value"
).reset_index()

# 清理pivot产生的多余列名层级
result.columns.name = None

以上两种方法输出的结果完全匹配你给出的目标表结构,只需要把代码里的列名、拆分逻辑替换成你自己数据的实际规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:18:15