Pandas数据重塑与轴向旋转:stack、unstack与pivot详解

小石头
小石头
发布时间:2026-10-13 | 5人浏览过
原创

本文详细介绍Pandas库中数据重塑与轴向旋转的核心方法。通过stack和unstack函数实现列索引与行索引的相互转换,并深入讲解pivot函数如何利用指定索引和值构建宽表。文章包含完整代码示例与输出结果,帮助开发者掌握长宽表转换技巧。

Pandas数据重塑与轴向旋转概述


import numpy as np
import pandas as pd
from pandas import Series,DataFrame

一、数据重塑

  • stack()函数:将数据的列索引转换为行索引,实现从宽表到长表的转换。
  • unstack()函数:将数据的行索引转换为列索引,实现从长表到宽表的转换。

df = DataFrame({'水果':['苹果','梨','草莓'],
        '数量':[3,4,5],
        '价格':[4,5,6]})
print(df)

示例原始数据包含三列:价格、数量和水果名称。具体数据如下: 0 价格4 数量3 水果苹果 1 价格5 数量4 水果梨 2 价格6 数量5 水果草莓

stack与unstack函数详解

1. 使用stack()函数


stack_df = df.stack()
print(stack_df)

执行stack()后的结果展示,原列名变为多级索引的第一层,原数据值成为Series的值: 0 价格 4 数量 3 水果 苹果 1 价格 5 数量 4 水果 梨 2 价格 6 数量 5 水果 草莓

输出数据类型为:dtype: object

2. 使用unstack()函数


print(stack_df.unstack())

对stack后的结果执行unstack(),数据恢复为原始DataFrame结构: 价格 数量 水果 0 4 3 苹果 1 5 4 梨 2 6 5 草莓

3. 通过level参数指定旋转轴的层次(默认level=-1)


print(stack_df.unstack(level=0))

当指定level=0时,unstack()将第一层索引(原列名)转为列,结果如下: 0 1 2 价格 4 5 6 数量 3 4 5 水果 苹果 梨 草莓

pivot轴向旋转操作

二、轴向旋转(pivot)

pivot(index, columns, values)函数:用于将长表转换为宽表。其中index指定新的行索引,columns指定新的列索引,values指定填充DataFrame的值。


df = DataFrame({'水果种类':['苹果','苹果','梨','梨','草莓','草莓'],
        '信息':['价格','数量','价格','数量','价格','数量'],
        '值':[4,3,5,4,6,5]})
print(df)

示例数据包含水果种类、信息类型(价格/数量)及对应数值: 信息 值 水果种类 0 价格 4 苹果 1 数量 3 苹果 2 价格 5 梨 3 数量 4 梨 4 价格 6 草莓 5 数量 5 草莓

将水果种类作为行索引,将信息作为列索引,进行透视操作。


print(df.pivot('水果种类','信息','值'))

透视后的结果,以水果种类为行,信息类型为列,值为内容: 信息 价格 数量 水果种类 梨 5 4 苹果 4 3 草莓 6 5

pivot的等价实现方式

pivot函数的功能可以通过set_index和unstack组合等价实现。


print(df.set_index(['水果种类','信息']).unstack())

使用set_index(['水果种类','信息']).unstack()得到的结果与pivot一致: 值 信息 价格 数量 水果种类 梨 5 4 苹果 4 3 草莓 6 5

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表