You need to enable JavaScript to run this app. pandas 实现多数值列拆为行维度、类别值转列的 pivot 数据重塑方法
优惠活动
大模型
产品
解决方案
定价
更多

pandas 实现多数值列拆为行维度、类别值转列的 pivot 数据重塑方法

Pandas 结构转换实现方案

操作逻辑说明

你之前操作没达到预期的核心原因是:原始DataFrame是双数值列宽表结构,每行同时存储value1、value2两个指标值,而pivot、pivot_table、transpose类操作默认适配单值长表,直接使用会生成多层索引,无法生成你要求的values标识列。
正确操作分两步走:先通过melt把分散的两个数值列拉成长表、生成指标标识列,再通过pivot把name字段的取值转为独立列。

完整可运行代码

import pandas as pd
# 1. 构造与描述完全匹配的原始DataFrame
df = pd.DataFrame({
    "date": ["2021-01-01", "2021-01-01", "2021-01-02", "2021-01-02"],
    "name": ["first", "second", "first", "second"],
    "value1": [1, 5, 6, 3],
    "value 2": [2, 7, 8, 9] # 注意原始字段的空格笔误
})
# 修正原始字段名的空格问题,避免后续操作报错
df = df.rename(columns={"value 2": "value2"})

# 2. 宽转长,生成values指标标识列
long_df = df.melt(
    id_vars=["date", "name"],  # 保留为维度的列
    value_vars=["value1", "value2"],  # 需要合并的数值列
    var_name="values",  # 存储指标名称的新列名
    value_name="temp_val"  # 存储实际数值的临时列
)

# 3. 把name字段的取值转成独立列
result = long_df.pivot(
    index=["date", "values"],  # 行维度:日期 + 指标名
    columns="name",  # 要转成独立列的字段
    values="temp_val"  # 匹配的实际值
).reset_index() # 还原索引为普通列

最终输出结构

生成的目标DataFrame完全匹配要求:

datevaluesfirstsecond
2021-01-01value115
2021-01-01value227
2021-01-02value163
2021-01-02value289

常见踩坑提示

  • 直接对原始宽表调用pivot会自动为value1、value2生成双层列索引,无法生成单独的values标识列,不符合需求
  • transpose仅会交换行和列的位置,无法自动合并分散的数值列,对本场景无作用
  • 如果后续需要兼容缺失值场景,可以在pivot步骤替换为pivot_table,添加聚合规则即可,核心逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 02:24:04