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)
相关推荐
roman_日积跬步-终至千里1 小时前
【数据Agent论文·查询与语义|06】RAT-SQL:怎样把问题、表和字段真正关联起来?
数据库·sql·数据分析
benchmark_cc3 小时前
量化项目启动时,应该先设计数据接口还是先编写策略?从系统架构角度做出正确选择
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
roman_日积跬步-终至千里4 小时前
【数据Agent论文·分析工作流|20】Data Interpreter:任务图怎样帮助复杂分析?
人工智能·数据分析
roman_日积跬步-终至千里5 小时前
【数据Agent论文·查询与语义|11】EntSQL:给了业务文档,模型为何还是写不对SQL?
数据库·人工智能·sql·数据分析
roman_日积跬步-终至千里6 小时前
【数据Agent论文·分析工作流|17】Data-Copilot:把重复分析变成可复用接口
数据分析·copilot
总要学点什么6 小时前
第63篇:3DTiles-大雁塔模型——190 块瓦片不是八叉树,抬高的却是球心那条法线
3d·数据挖掘·数据分析·gis·webgl
data analyse 4567 小时前
服务端统计时区切换的日期归并
大数据·前端·数据库·人工智能·数据分析
roman_日积跬步-终至千里8 小时前
【数据Agent论文·表格事实与生成|15】LogicNLG:数值抄对了,逻辑结论就对了吗?
人工智能·深度学习·自然语言处理·数据分析
派小心.8 小时前
DAU和MAU怎么计算?先确定活跃事件、用户键和统计窗口
大数据·服务器·前端·人工智能·数据分析
roman_日积跬步-终至千里9 小时前
【数据Agent论文·查询与语义|09】Spider 2.0:从生成SQL走向完成企业工作流
数据库·sql·数据分析