pandas__unstack方法与set_index详解
一、unstack详解
1、用途
unstack()是 pandas 中一个非常重要的数据重塑方法,主要用于将多级索引的层次结构从行索引转换为列索引。最主要的一个用途是将dataframe通过groupby操作得到的grouped进行转换
2、语法说明
DataFrame.unstack(level=-1, fill_value=None) # 其返回值也是一个DataFrame
参数说明
- level:要取消堆叠的索引级别,可以是整数、字符串或列表,默认为 -1(最后一级)
- level=0,是第一级索引,最高级索引;
- level=1,是第二级索引;
- level=-1,是最后一级索引;
- fill_value:用于替换缺失值的值
3、实例详解1
# 创建分组数据示例
data = {'city': ['北京', '北京', '上海', '上海', '广州', '广州'],'quarter': ['Q1', 'Q2', 'Q1', 'Q2', 'Q1', 'Q2'],'sales': [100, 150, 200, 180, 120, 160]
}
df = pd.DataFrame(data)
>>> 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的相反操作,将一级索引变成多级索引
grouped = df.set_index(['city', 'quarter'])print("分组数据:")
print(grouped)
>>> print(grouped)sales
city quarter
北京 Q1 100Q2 150
上海 Q1 200Q2 180
广州 Q1 120Q2 160
对于上述grouped来说,city是第一级索引,quarter是第二级索引,可以适用unstack将索引转换成列
pivoted = grouped.unstack(level=0)
print("季度unstack后的数据:")
print(pivoted)
>>> pivoted = grouped.unstack(level=0)
>>> print("季度unstack后的数据:")
季度unstack后的数据:
>>> print(pivoted)sales
city 上海 北京 广州
quarter
Q1 200 100 120
Q2 180 150 160
>>>
也可以适用具体的索引名,将其转换成列名
>>> # 将季度unstack到列
>>> pivoted = grouped.unstack(level='quarter')
>>> print("季度unstack后的数据:")
季度unstack后的数据:
>>> print(pivoted)sales
quarter Q1 Q2
city
上海 200 180
北京 100 150
广州 120 160
>>>
二、多级索引设置
1、实例1
如下所示,可以通过将列名设置乘索引名称,来设置多级索引
# 创建分组数据示例
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方法设置多级索引。
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)
