pandas__unstack方法与set_index详解

一、unstack详解

1、用途

unstack()是 pandas 中一个非常重要的数据重塑方法,主要用于将多级索引的层次结构从行索引转换为列索引。最主要的一个用途是将dataframe通过groupby操作得到的grouped进行转换

2、语法说明

python 复制代码
DataFrame.unstack(level=-1, fill_value=None) # 其返回值也是一个DataFrame

参数说明

  • level:要取消堆叠的索引级别,可以是整数、字符串或列表,默认为 -1(最后一级)
    • level=0,是第一级索引,最高级索引;
    • level=1,是第二级索引;
    • level=-1,是最后一级索引;
  • fill_value:用于替换缺失值的值

3、实例详解1

python 复制代码
# 创建分组数据示例
data = {
    'city': ['北京', '北京', '上海', '上海', '广州', '广州'],
    'quarter': ['Q1', 'Q2', 'Q1', 'Q2', 'Q1', 'Q2'],
    'sales': [100, 150, 200, 180, 120, 160]
}
df = pd.DataFrame(data)
python 复制代码
>>> print(df)
  city quarter  sales
0   北京      Q1    100
1   北京      Q2    150
2   上海      Q1    200
3   上海      Q2    180
4   广州      Q1    120
5   广州      Q2    160

将dataframe stack化,即unstack的相反操作,将一级索引变成多级索引

python 复制代码
grouped = df.set_index(['city', 'quarter'])

print("分组数据:")
print(grouped)
python 复制代码
>>> print(grouped)
              sales
city quarter
北京   Q1         100
     Q2         150
上海   Q1         200
     Q2         180
广州   Q1         120
     Q2         160

对于上述grouped来说,city是第一级索引,quarter是第二级索引,可以适用unstack将索引转换成列

python 复制代码
pivoted = grouped.unstack(level=0)
print("季度unstack后的数据:")
print(pivoted)
python 复制代码
>>> pivoted = grouped.unstack(level=0)
>>> print("季度unstack后的数据:")
季度unstack后的数据:
>>> print(pivoted)
        sales
city       上海   北京   广州
quarter
Q1        200  100  120
Q2        180  150  160
>>>

也可以适用具体的索引名,将其转换成列名

python 复制代码
>>> # 将季度unstack到列
>>> pivoted = grouped.unstack(level='quarter')
>>> print("季度unstack后的数据:")
季度unstack后的数据:
>>> print(pivoted)
        sales
quarter    Q1   Q2
city
上海        200  180
北京        100  150
广州        120  160
>>>

二、多级索引设置

1、实例1

如下所示,可以通过将列名设置乘索引名称,来设置多级索引

python 复制代码
# 创建分组数据示例
data = {
    'city': ['北京', '北京', '上海', '上海', '广州', '广州'],
    'quarter': ['Q1', 'Q2', 'Q1', 'Q2', 'Q1', 'Q2'],
    'sales': [100, 150, 200, 180, 120, 160]
}
df = pd.DataFrame(data)
grouped = df.set_index(['city', 'quarter'])

print("分组数据:")
print(grouped)

# 将季度unstack到列
pivoted = grouped.unstack(level='quarter')
print("季度unstack后的数据:")
print(pivoted)

2、 pd.MultiIndex

如下所示,可以通过 pd.MultiIndex方法设置多级索引。

python 复制代码
import pandas as pd
import numpy as np

# 创建示例数据
index = pd.MultiIndex.from_tuples([('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y')])
df = pd.DataFrame({'value': [1, 2, 3, 4]}, index=index)
print("原始数据:")
print(df)
相关推荐
夜雪闻竹16 小时前
Claude Code 对话自动导入完全指南
数据库·数据挖掘·copilot
YangYang9YangYan17 小时前
2026学习数据分析对产品经理的价值
学习·数据分析·产品经理
babe小鑫17 小时前
2026学数据分析对就业能力提升的价值
数据挖掘·数据分析
2501_9307077818 小时前
使用C#代码在 Excel 中为数据透视表添加筛选器
数据库·数据挖掘·数据分析
sun_linhui19 小时前
数据治理 vs 数据管理 精准区分
数据分析
企服AI产品测评局19 小时前
2026实测:能耗管控场景下的AI工具数据分析能力横向对比,实在Agent如何通过ISSUT打破数据孤岛?
人工智能·ai·chatgpt·数据挖掘·数据分析
70asunflower20 小时前
相对路径的作用与价值
人工智能·数据挖掘·数据分析
码界筑梦坊20 小时前
124-基于Python的航空旅客满意度数据可视化分析系统
开发语言·python·信息可视化·数据分析·flask·毕业设计
星越华夏20 小时前
PPTX判断包含图表id
python·pandas
机器学习算法与Python实战20 小时前
云端 AI Agent 实测:数据分析→PPT→视频,一个输入框跑完整个项目
人工智能·数据分析·powerpoint