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)
相关推荐
GIS数据转换器44 分钟前
无人机车载巡检系统
大数据·数据库·人工智能·数据挖掘·数据分析·无人机
babe小鑫14 小时前
2026学数据分析对未来职业发展的价值
数据挖掘·数据分析
dongf201915 小时前
R 语言 Apriori 关联规则算法
数据分析·r语言·关联规则
是上好佳佳佳呀15 小时前
【数据分析|Day02】数据收集、数据清洗、数据分析笔记
笔记·数据分析
王牌狮AIen20 小时前
合规生命线——警惕“AI投毒”与算法陷阱,如何为品牌装上“事前免疫”系统?
大数据·人工智能·数据挖掘·geo·ai营销
dongf201921 小时前
R语言分类决策数算法----iris数据集
分类·数据分析·r语言
郑洁文1 天前
达州市人口相关数据分析与应用
大数据·数据挖掘·数据分析·毕设·达州市人口
装不满的克莱因瓶1 天前
了解不同机器学习模型的分类
人工智能·python·算法·机器学习·ai·分类·数据挖掘
YangYang9YangYan1 天前
2026文科生报考大数据类专业学习数据分析的可行性分析
大数据·学习·数据分析
郑洁文1 天前
景点综合数据分析与应用
大数据·数据挖掘·数据分析·四川景点