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)
相关推荐
Christo329 分钟前
2022-《Deep Clustering: A Comprehensive Survey》
人工智能·算法·机器学习·数据挖掘
LDG_AGI3 小时前
【推荐系统】深度学习训练框架(十七):TorchRec之KeyedJaggedTensor
人工智能·pytorch·深度学习·机器学习·数据挖掘·embedding
Christo34 小时前
2024《A Rapid Review of Clustering Algorithms》
人工智能·算法·机器学习·数据挖掘
大数据魔法师4 小时前
昭通天气数据分析与挖掘(三)- 昭通天气数据可视化分析
信息可视化·数据分析·finebi
十三画者5 小时前
【文献分享】vConTACT3机器学习能够实现可扩展且系统的病毒分类体系的构建
人工智能·算法·机器学习·数据挖掘·数据分析
wfeqhfxz25887825 小时前
基于YOLOv10n的热带海洋蝴蝶鱼物种识别与分类系统_P3456数据集训练_1
yolo·分类·数据挖掘
Boll09660005 小时前
开关柜设备状态识别与分类_YOLO11_C3k2_RetBlock实现
人工智能·分类·数据挖掘
小艳加油5 小时前
R语言生态环境数据分析:从基础操作到水文、地形、物种多度、空间聚类、排序与生物多样性的系统应用
数据分析·r语言·生态环境
Dingdangcat865 小时前
基于RetinaNet的仙人掌品种识别与分类:Gymnocalycium与Mammillaria属10品种自动识别
人工智能·数据挖掘
ASD123asfadxv5 小时前
柑橘果实表面病害与虫害智能检测与分类 YOLO11-Seg-GhostHGNetV2实现
人工智能·分类·数据挖掘