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)
相关推荐
zhumin7262 小时前
舆情聚类与政府投诉联动分析:基于时间序列的社会治理框架
机器学习·数据挖掘·聚类
临床数据科学和人工智能兴趣组5 小时前
RStudio的Console(控制台)是一个非常重要的组件
人工智能·机器学习·数据分析·r语言·r语言-4.2.1
暖和_白开水7 小时前
数据分析agent (七):contextvars 模块上下文request_id
java·前端·数据分析
杨超越luckly10 小时前
Agent应用指南:13年与13线——武汉地铁进化史
数据分析·html·agent·可视化·地铁客流
qifuzixunzhan10 小时前
售后数据分析技巧:助力企业构建高效服务体系
数据分析·售后服务·售后管理软件·售后管理
数智化管理手记11 小时前
预算控制手工核对效率低?预算控制数字化落地实操如何做?
大数据·网络·数据库·人工智能·数据挖掘
於 兔シ12 小时前
Apache Superset 二次开发实践:接入 AI Agent,并确保数据权限不被绕过
ai·数据分析·agent·数据可视化·bi·superset·数据权限
statistican_ABin13 小时前
WHO各国预期寿命影响因素分析与轻量回归预测
大数据·人工智能·python·数据分析·回归
chatexcel13 小时前
ChatExcel入选量子位智库2026 Q2「创新AI 100」,跻身AI数据分析领域代表产品!
人工智能·数据挖掘·数据分析
知识分享小能手1 天前
统计学学习教程,从入门到精通,分类数据分析 — 知识点详解(14)
学习·分类·数据分析