pandas.DataFrame.unstack()是一种数据结构转换函数,可以将具有多层索引的pandas DataFrame对象转换为单层DataFrame对象。它的作用是将DataFrame中的某些列作为列的索引,同时将行索引的某些级别旋转为新的列。
另外,unstack()函数还支持将多个索引级别转换为列,以及在转换时选择要使用的元素。
语法:
DataFrame.unstack(level=-1, fill_value=None)
参数说明:
level: 默认为最后一级别,即 -1 级别。
fill_value:用于替换NaN值的固定值。
首先创建一个有多个索引级别的DataFrame:
import pandas as pd
data = pd.DataFrame({'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one', 'one'],
'C': ['x', 'y', 'x', 'y', 'x', 'y'],
'D': [1, 3, 2, 5, 4, 1]})
df = data.set_index(['A', 'B', 'C'])
print(df)
输出结果:
D
A B C
foo one x 1
y 3
two x 2
bar two y 5
one x 4
y 1
使用unstack()将DataFrame中的C级别索引转换为列,并创建一个新的DataFrame:
result = df.unstack('C')
print(result)
输出结果:
D
C x y
A B
bar one 4 1
two NaN 5
foo one 1 3
two 2 NaN
此时,C级别的索引变成了新的DataFrame的列名。
将DataFrame中的A和C级别索引都转换为列,创建一个新的DataFrame:
result = df.unstack(['A', 'C'])
print(result)
输出结果:
D
A bar foo
C x y x y
B
one 4.0 1.0 1 3
two NaN 5.0 2 NaN
在此实例中,使用了两个级别的索引的名称来指定在转换时使用的索引级别。结果中的列名由指定的索引级别组成。如果某个索引级别不包含全部的唯一值,则结果DataFrame中的列将包含NaN值。
总之,pandas.DataFrame.unstack()是一种非常实用的数据结构转换函数,可以将多层索引的DataFrame对象转换为更具可读性和操作性的单层DataFrame对象,可以提高数据操作效率。
本文链接:http://task.lmcjl.com/news/17680.html