• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共95篇

    python3.X - 数据分析 - Pandas

关闭

返回栏目

关闭

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

32 - 转换 - pd.pivot() - 多行转多列

作者:

贺及楼

成为作者

更新日期:2024-10-18 14:32:00

多行转多列

pivot 函数简介

Pandas 的 pivot 函数是一种数据重塑工具,它将数据从长格式转换为宽格式,通过指定的行、列和值来创建一个新的派生表(pivot table)。这种转换在数据汇总、数据探索和多维数据的分析中非常有用。

派生表(Pivot Table)的特点:

数据聚合:可以对数据进行聚合,如求和、平均、最大、最小等。
多维分析:允许你从多个维度分析数据。
灵活的索引:可以自定义索引(行)和列。

使用 pivot 函数的关键参数:

index:新 DataFrame 的索引(行标签)。
columns:新 DataFrame 的列标签。
values:要聚合的列的名称或位置。
aggfunc:聚合函数,默认为 mean,但可以指定其他函数,如 sum、min、max 等。
使用 pivot 的例子:

方法一 pd.pivot()

  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame(data = [{'类别': '黄水果', '水果': '香蕉', '反馈': '点赞', '数量': 14}, {'类别': '黄水果', '水果': '菠萝', '反馈': '点赞', '数量': 30}, {'类别': '黄水果', '水果': '柠檬', '反馈': '点赞', '数量': 50}, {'类别': '红水果', '水果': '草莓', '反馈': '点赞', '数量': 160}, {'类别': '红水果', '水果': '苹果', '反馈': '点赞', '数量': 6}, {'类别': '红水果', '水果': '樱桃', '反馈': '点赞', '数量': 8}, {'类别': '黄水果', '水果': '香蕉', '反馈': '投币', '数量': 7}, {'类别': '黄水果', '水果': '菠萝', '反馈': '投币', '数量': 15}, {'类别': '黄水果', '水果': '柠檬', '反馈': '投币', '数量': 25}, {'类别': '红水果', '水果': '草莓', '反馈': '投币', '数量': 80}, {'类别': '红水果', '水果': '苹果', '反馈': '投币', '数量': 3}, {'类别': '红水果', '水果': '樱桃', '反馈': '投币', '数量': 4}])
类别 水果 反馈 数量
0 黄水果 香蕉 点赞 14
1 黄水果 菠萝 点赞 30
2 黄水果 柠檬 点赞 50
3 红水果 草莓 点赞 160
4 红水果 苹果 点赞 6
5 红水果 樱桃 点赞 8
6 黄水果 香蕉 投币 7
7 黄水果 菠萝 投币 15
8 黄水果 柠檬 投币 25
9 红水果 草莓 投币 80
10 红水果 苹果 投币 3
11 红水果 樱桃 投币 4
  1. df1 = pd.pivot(df, index=["类别", "水果"], columns="反馈", values="数量")
  2. df2 = df1.reset_index()
反馈 投币 点赞
类别 水果
红水果 樱桃 4 8
苹果 3 6
草莓 80 160
黄水果 柠檬 25 50
菠萝 15 30
香蕉 7 14
反馈 类别 水果 投币 点赞
0 红水果 樱桃 4 8
1 红水果 苹果 3 6
2 红水果 草莓 80 160
3 黄水果 柠檬 25 50
4 黄水果 菠萝 15 30
5 黄水果 香蕉 7 14
  1. df1 = pd.pivot(df, index=["类别", "水果"], columns="反馈", values="数量")
反馈 投币 点赞
类别 水果
红水果 樱桃 4 8
苹果 3 6
草莓 80 160
黄水果 柠檬 25 50
菠萝 15 30
香蕉 7 14
  1. df1 = pd.pivot(df, index="反馈", columns=["类别", "水果"], values="数量")
类别 黄水果 红水果
水果 香蕉 菠萝 柠檬 草莓 苹果 樱桃
反馈
投币 7 15 25 80 3 4
点赞 14 30 50 160 6 8

多行转多列

方法二 df.unstack() 解套; 不堆叠;

  1. # 以下未验证
  2. # 可以看到上面这一步,就直接相当于df1.set_index(["类别", "水果"])["反馈"].unstack()
  3. # 然后再手动rename_axis、再reset_index即可