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

无索引情况下pd.DataFrame.melt的反向操作是什么?

嘿,这个问题问得很到位!pd.DataFrame.melt()的反向操作,最常用的就是**pivot()方法——如果你的数据里没有重复的索引+列组合,用它就足够了;要是存在重复项,那pivot_table()**会是更稳妥的选择。

我给你搭个具体的示例场景,对应你说的从df2还原回原始df的需求:

首先假设我们的原始宽表df是这样的:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Math': [85, 90, 78],
    'English': [92, 88, 85],
    'Science': [79, 81, 93]
})

经过melt操作后得到窄表df2:

df2 = df.melt(id_vars='Name', var_name='Subject', value_name='Score')

现在要从df2还原回原始的宽表,用pivot()就可以搞定:

# 用pivot反向还原
restored_df = df2.pivot(
    index='Name',       # 对应melt时的id_vars
    columns='Subject',  # 对应melt时的var_name
    values='Score'      # 对应melt时的value_name
).reset_index()

# 去掉columns的名称,让结构和原始df完全一致
restored_df.columns.name = None

要是你的df2里存在同一Name+Subject对应多个Score的情况,pivot()会直接报错,这时候就换pivot_table(),还能指定聚合方式处理重复值:

# 处理重复值的情况,这里用均值作为聚合示例
restored_df = df2.pivot_table(
    index='Name',
    columns='Subject',
    values='Score',
    aggfunc='mean'  # 可以换成sum、first等其他聚合函数
).reset_index()
restored_df.columns.name = None

简单来说,melt是把宽表转窄,pivot/pivot_table就是把窄表转宽,完美对应反向操作~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:18:55