• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共95篇

    python3.X - 数据分析 - Pandas

关闭

返回栏目

关闭

返回python3.X - 数据分析 - Pandas栏目

31 - 转换 - pd.melt() - 多列转多行

作者:

贺及楼

成为作者

更新日期:2024-10-18 14:31:35

多列转多行

melt 函数 简介

Pandas 的 melt 函数是用于将宽格式数据集转换为长格式数据集的工具。这种转换在数据清洗和准备阶段非常有用,尤其是在你需要将表格数据转换为更易于分析的形式时。

长格式(Long Format)的特点:

每个观测值占据一行。
每个变量占据一列。
长格式通常用于数据建模和数据可视化。
使用 melt 函数的典型场景:
当你有多个列需要被转换为单一测量值时。
当你需要将宽格式数据集转换为长格式以进行进一步的分析。

melt 函数的关键参数:

id_vars: 用于指定不参与熔化操作的列名,它们将作为新长格式 DataFrame 的列。
value_vars: 需要被熔化的列名,它们的值将被展开到新 DataFrame 的某一列。
var_name: 用于指定新长格式 DataFrame 中,来自 value_vars 的列名的列名。
value_name: 用于指定新长格式 DataFrame 中,包含 value_vars 列值的列名。
col_level: 如果输入的 DataFrame 是多级索引(MultiIndex),这个参数用于指定哪一级别将被熔化。

  1. import numpy as np
  2. import pandas as pd
  3. pd.melt(frame, id_vars=[], value_vars=[], var_name="旧列名新列名", value_name="值的列名")
  4. frame: 接收一个DataFrame
  5. id_vars: 不需要进行列转行的字段, 比如这里的"姓名""水果", 在列转行之后会自动进行匹配
  6. value_vars: 需要进行列转行的字段
  7. var_name: 第四个参数, 我们说列转行之后会生成两个列, 第一个列存储的值是"列转行之前的列的列名",第二个列存储的值是"列转行之前的列的值"。但是生成的两个列总要有列名吧,所以var_name就是生成的第一个列的列名
  8. value_name: 生成的第二个列的列名
  9. col_level: 针对于具有二级列名的DataFrame, 这个一般可以不用管
  1. df = pd.DataFrame([{'类别': '黄水果', '水果': '香蕉', '点赞': 14, '投币': 7}, {'类别': '黄水果', '水果': '菠萝', '点赞': 30, '投币': 15}, {'类别': '黄水果', '水果': '柠檬', '点赞': 50, '投币': 25}, {'类别': '红水果', '水果': '草莓', '点赞': 160, '投币': 80}, {'类别': '红水果', '水果': '苹果', '点赞': 6, '投币': 3}, {'类别': '红水果', '水果': '樱桃', '点赞': 8, '投币': 4}])
类别 水果 点赞 投币
0 黄水果 香蕉 14 7
1 黄水果 菠萝 30 15
2 黄水果 柠檬 50 25
3 红水果 草莓 160 80
4 红水果 苹果 6 3
5 红水果 樱桃 8 4
  1. df2 = pd.melt(df, id_vars=["类别", "水果"],
  2. value_vars=["点赞", "投币"],
  3. var_name="反馈",
  4. value_name="数量")
类别 水果 反馈 数量
0 黄水果 香蕉 点赞 14
1 黄水果 菠萝 点赞 30
2 黄水果 柠檬 点赞 50
3 红水果 草莓 点赞 160
4 红水果 苹果 点赞 6
5 红水果 樱桃 点赞 8
6 黄水果 香蕉 投币 7
7 黄水果 菠萝 投币 15
8 黄水果 柠檬 投币 25
9 红水果 草莓 投币 80
10 红水果 苹果 投币 3
11 红水果 樱桃 投币 4

多列转多行