【Pandas】pandas Series unstack
Pandas2.2 Series
Computations descriptive stats
方法 | 描述 |
---|---|
Series.argsort([axis, kind, order, stable]) | 用于返回 Series 中元素排序后的索引位置的方法 |
Series.argmin([axis, skipna]) | 用于返回 Series 中最小值索引位置的方法 |
Series.argmax([axis, skipna]) | 用于返回 Series 中最大值索引位置的方法 |
Series.reorder_levels(order) | 用于重新排列 Series 中多层索引(MultiIndex)层级顺序的方法 |
Series.sort_values(*[, axis, ascending, …]) | 用于对 Series 中的值进行排序的方法 |
Series.sort_index(*[, axis, level, …]) | 用于根据索引对 Series 进行排序 |
Series.swaplevel([i, j, copy]) | 用于交换 MultiIndex 中的两个级别 |
Series.unstack([level, fill_value, sort]) | 用于将 MultiIndex 中的一个或多个级别“旋转”为列 |
pandas.Series.unstack
pandas.Series.unstack
方法用于将 MultiIndex
中的一个或多个级别“旋转”为列,从而将长格式数据转换为宽格式数据。这对于数据分析和可视化非常有用,可以更方便地查看和操作多级索引的数据。
参数说明
- level:整数、字符串或列表,默认为 -1(即最内层)。指定要旋转的级别,可以是级别的位置(从 0 开始)或级别的名称。如果传递一个列表,则会旋转多个级别。
- fill_value:标量值,默认为 None。用于填充因旋转而产生的缺失值。如果未指定,则缺失值将被设置为 NaN。
- sort:布尔值,默认为 False。如果为 True,则在返回结果之前对行索引进行排序。
示例及结果
import pandas as pd
# 创建一个带有 MultiIndex 的 Series
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
s = pd.Series(range(8), index=index)
print("原始 Series:")
print(s)
# 使用 unstack 将 'second' 级别旋转为列
unstacked_s = s.unstack(level='second', fill_value=0)
print("\n旋转后的 DataFrame:")
print(unstacked_s)
输出结果
原始 Series:
first second
bar one 0
two 1
baz one 2
two 3
foo one 4
two 5
qux one 6
two 7
dtype: int64
旋转后的 DataFrame:
second one two
first
bar 0 1
baz 2 3
foo 4 5
qux 6 7
通过上述代码和输出结果可以看到,unstack
方法将 MultiIndex
中的 second
级别旋转为列,并且可以通过设置不同的参数来控制旋转的级别、缺失值的填充以及是否对行索引进行排序。
注意事项
- 如果旋转后产生了缺失值,可以通过
fill_value
参数指定填充值。 - 如果
MultiIndex
中有重复的组合键,在旋转时可能会导致错误或不明确的结果。确保数据中没有重复的组合键。 unstack
操作的逆操作是stack
,可以将宽格式数据转换回长格式数据。
多级别旋转示例
如果你想旋转多个级别,可以传递一个包含级别名称或位置的列表:
# 创建一个带有三层 MultiIndex 的 Series
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'],
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second', 'third'])
s = pd.Series(range(8), index=index)
print("原始 Series:")
print(s)
# 使用 unstack 将 'second' 和 'third' 级别旋转为列
unstacked_s_multi = s.unstack(['second', 'third'], fill_value=0)
print("\n旋转多个级别的 DataFrame:")
print(unstacked_s_multi)
输出结果
原始 Series:
first second third
bar one a 0
two b 1
baz one c 2
two d 3
foo one e 4
two f 5
qux one g 6
two h 7
dtype: int64
旋转多个级别的 DataFrame:
second one two one two one two one two
third a b c d e f g h
first
bar 0 1 0 0 0 0 0 0
baz 0 0 2 3 0 0 0 0
foo 0 0 0 0 4 5 0 0
qux 0 0 0 0 0 0 6 7
在这个例子中,unstack
方法将 second
和 third
两个级别同时旋转为列,生成了一个更宽的 DataFrame。