DataFrame.unstack()方法的使用
DataFrame.unstack()
是一种用于重塑数据的方法,主要用于将某个层级的行索引转为列索引。它通常与多级索引(MultiIndex)一起使用,方便地将行数据“拆开”到列中。下面详细介绍unstack()
方法的用法及一些实际示例。
基本语法
DataFrame.unstack(level=-1, fill_value=None)
level
: 用于指定要转到列的行索引层级,默认为最内层(-1
)。fill_value
: 在转置过程中,如果出现缺失值,可以用此参数填充缺失值。
示例解释
以下通过实例展示unstack()
的不同用法。
1. 基本用法
假设有一个带有多级索引的DataFrame:
import pandas as pd# 创建一个具有多级索引的示例DataFrame
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two')
], names=['Upper', 'Lower'])data = pd.DataFrame({'Values': [10, 20, 30, 40]
}, index=index)print("原始DataFrame:")
print(data)
输出:
Values
Upper Lower
A one 10two 20
B one 30two 40
此DataFrame中有多级索引(Upper
和 Lower
)。现在通过unstack()
将最内层Lower
索引转为列:
data_unstacked = data.unstack()
print("\n使用 unstack() 之后:")
print(data_unstacked)
输出:
Values
Lower one two
Upper
A 10 20
B 30 40
这里,Lower
索引被转换成了列索引。
2. 指定不同的 level
如果你有多个层级的索引,可以通过level
参数选择要转换的层级。例如,level=0
表示将Upper
索引转换为列。
data_unstacked = data.unstack(level=0)
print("\n指定 level=0 使用 unstack():")
print(data_unstacked)
输出:
Values
Upper A B
Lower
one 10 30
two 20 40
3. fill_value
参数
在unstack
操作中,如果数据缺失会产生NaN。fill_value
参数可以用指定的值来填充这些缺失值。
例如,增加一些缺失数据:
# 在多层索引中加入一个缺失值的示例
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('B', 'one'), ('C', 'two')
], names=['Upper', 'Lower'])data = pd.DataFrame({'Values': [10, 20, 30, 40]
}, index=index)# 使用 unstack 填充缺失值
data_unstacked = data.unstack(fill_value=0)
print("\n使用 unstack() 并填充缺失值 (fill_value=0):")
print(data_unstacked)
输出:
Values
Lower one two
Upper
A 10 20
B 30 0
C 0 40
这里fill_value=0
,所以缺失值被填充为 0。
4. 多列情况下的 unstack()
unstack()
也可以处理多个列:
# 创建一个具有多级索引和多个列的示例DataFrame
data = pd.DataFrame({'Category': ['A', 'A', 'B', 'B'],'Sub-Category': ['one', 'two', 'one', 'two'],'Values1': [10, 20, 30, 40],'Values2': [50, 60, 70, 80]
}).set_index(['Category', 'Sub-Category'])print("\n具有多个列的 DataFrame:")
print(data)# 使用 unstack 转换
data_unstacked = data.unstack()
print("\n具有多个列的 DataFrame 使用 unstack() 之后:")
print(data_unstacked)
输出:
具有多个列的 DataFrame:Values1 Values2
Category Sub-Category
A one 10 50two 20 60
B one 30 70two 40 80具有多个列的 DataFrame 使用 unstack() 之后:Values1 Values2
Sub-Category one two one two
Category
A 10 20 50 60
B 30 40 70 80
这里unstack()
将 Sub-Category
转成了列,并对每个列中有多个数据的项进行了列展开。
总结
.unstack()
常用于多级索引的DataFrame,用于转换指定的行索引层为列索引。- 可以通过
level
指定层级,或者用fill_value
填充缺失数据。