锋哥原创的Pandas2 Python数据处理与分析 视频教程:  

2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

melt() 是 pandas 中用于数据重塑的核心方法之一,它可以将 宽格式数据 转换为 长格式数据,特别适合处理具有多个观测值列的数据集。与 stack()/unstack() 不同,melt() 提供了更直观的方式来整理数据,尤其适用于数据预处理和清洗阶段。

基本概念:宽格式 vs 长格式

在深入 melt() 之前,先理解两种数据格式:

  • 宽格式:每个变量有单独的列

   ID  Math  Science  English
0   1    90       85       92
1   2    78       88       95
  • 长格式:变量名和值分别存储在单独的列中

   ID   Subject  Score
0   1     Math     90
1   1  Science     85
2   1  English     92
3   2     Math     78
4   2  Science     88
5   2  English     95

基本语法

pd.melt(frame, 
        id_vars=None, 
        value_vars=None, 
        var_name=None, 
        value_name='value', 
        col_level=None, 
        ignore_index=True)

参数说明

参数 说明
frame 要处理的 DataFrame
id_vars 保持不变的列(标识变量)
value_vars 要融合的列(观测值变量)
var_name 新创建的变量名列的名称
value_name 新创建的值列的名称
col_level 用于多级列索引的层级
ignore_index 是否忽略原始索引(默认为 True)

示例

import pandas as pd
​
# 创建示例数据
df = pd.DataFrame({
    'Student': ['Alice', 'Bob'],
    'Math': [90, 78],
    'Science': [85, 88],
    'English': [92, 95]
})
​
print("原始数据(宽格式):")
print(df)

使用 melt() 转换:

melted_df = pd.melt(
    df,
    id_vars=['Student'],  # 保留学生列
    value_vars=['Math', 'Science', 'English'],  # 融合的科目列
    var_name='Subject',  # 新列名:存储科目名称
    value_name='Score'  # 新列名:存储分数
)
​
print("\n融合后数据(长格式):")
print(melted_df)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐