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

Python行转列:请求Pandas melt/stack方法实现步骤指导

用Pandas的melt/stack转换数据格式

一、使用melt函数实现宽表转长表

melt是Pandas处理宽转长的核心工具,关键是明确不需要转换的标识符列和要展开的数值列。

示例操作

假设你的源数据是典型的宽表结构:

import pandas as pd

# 构造示例数据(对应你表格中的宽表格式)
df = pd.DataFrame({
    "姓名": ["张三", "李四"],
    "数学": [90, 78],
    "语文": [85, 92],
    "英语": [88, 80]
})

执行转换:

# id_vars:保留不变的列;var_name:原列名转换后的新列名;value_name:原列值对应的新列名
melted_df = df.melt(
    id_vars="姓名",
    var_name="科目",
    value_name="分数"
)

如果需要指定特定列转换,加上value_vars参数即可:

melted_df = df.melt(
    id_vars="姓名",
    value_vars=["数学", "语文"],  # 只转换这两列
    var_name="科目",
    value_name="分数"
)

二、使用stack函数实现转换

stack更适合处理带索引的表格,通过将列标签“堆叠”为行索引来实现宽转长。

示例操作

# 先将标识符列设为索引
df_indexed = df.set_index("姓名")
# 堆叠列标签到行,再重置索引转为DataFrame
stacked_df = df_indexed.stack().reset_index()
# 重命名列名匹配目标格式
stacked_df.columns = ["姓名", "科目", "分数"]

三、常见错误排查

  • 未指定id_vars:会导致所有列被转换,丢失关键标识信息
  • 列名不匹配:确保var_name和value_name与目标格式的列名一致
  • 多层表头问题:如果源表有多层列标签,需要先通过df.columns = df.columns.map('_'.join)合并层级,再进行转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:45:20