详解 Pandas 的 melt 函数

Pandas 的 melt() 函数是用来将 DataFrame 中的很多列重塑转换为两列,一列为原来多列的列名,一列为原来多列对应的列值。

一、数据准备

python 复制代码
import pandas as pd

df = pd.DataFrame({
    "product_id": [0, 1],
    "store1": [95, 70],
    "store2": [100, None],
    "store3": [105, 80]
})
print(df)
复制代码
  product_id  store1  store2  store3
0           0      95   100.0     105
1           1      70     NaN      80

二、方法签名

python 复制代码
def melt(
    frame: DataFrame, # 需重塑转换的 dataframe
    id_vars=None, # 指定不参与转换的列
    value_vars=None,  # 指定参与转换的列
    var_name=None,  # 转换后列名所在列的名字,默认为 variable
    value_name: Hashable = "value", # 转换后列值所在列的名字,默认为 value
    col_level=None,
    ignore_index: bool = True,
) -> DataFrame:

三、基本使用

python 复制代码
# 使用 id_vars 参数指定不参与转换的列,其余列均进行转换
df1 = pd.melt(frame=df, id_vars="product_id")
print(df1)
复制代码
   product_id variable  value
0           0   store1   95.0
1           1   store1   70.0
2           0   store2  100.0
3           1   store2    NaN
4           0   store3  105.0
5           1   store3   80.0
python 复制代码
# # 使用 id_vars 参数指定不参与转换的列,使用 value_vars 指定参与转换的列,其余列删除
df2 = pd.melt(df, id_vars="product_id", value_vars=["store1", "store2"])
print(df2)
复制代码
   product_id variable  value
0           0   store1   95.0
1           1   store1   70.0
2           0   store2  100.0
3           1   store2    NaN
python 复制代码
# 使用 var_name 和 value_name 修改转换后的列名称
df3 = pd.melt(df, id_vars="product_id", var_name="store", value_name="price")
print(df3)
复制代码
   product_id   store  price
0           0  store1   95.0
1           1  store1   70.0
2           0  store2  100.0
3           1  store2    NaN
4           0  store3  105.0
5           1  store3   80.0
相关推荐
PEI04几秒前
MVCC(多版本并发控制)
java·开发语言·数据库
熊猫钓鱼>_>24 分钟前
2025反爬虫之战札记:从robots.txt到多层防御的攻防进化史
开发语言·c++·爬虫
牛十二1 小时前
mac-intel操作系统go-stock项目(股票分析工具)安装与配置指南
开发语言·前端·javascript
励志不掉头发的内向程序员1 小时前
从零开始的python学习——文件
开发语言·python·学习
恒森宇电子有限公司1 小时前
IP5326_BZ 支持C同口输入输出的移动电源芯片 2.4A的充放电电流 支持4LED指示灯
c语言·开发语言·单片机
THMAIL1 小时前
量化基金从小白到大师 - 金融数据获取大全:从免费API到Tick级数据实战指南
人工智能·python·深度学习·算法·机器学习·金融·kafka
曼巴UE51 小时前
UE5.3 C++ 接口初步使用
开发语言·jvm·c++
奔跑的石头_2 小时前
GO语言的主要语法和特性
开发语言
代码欢乐豆2 小时前
scikit-learn零基础配置(含python、anaconda)
python·机器学习·scikit-learn
liulilittle2 小时前
UNIX/macOS路由表查询原理与实现
服务器·开发语言·c++·macos·unix·编程语言