Pandas 中 stack 和 unstack 方法在数据重塑中的应用
在 Pandas 中,stack 和 unstack 是用于重塑数据的重要方法,主要用于处理具有多层索引(MultiIndex)的数据。它们可以帮助你在长格式(long format)和宽格式(wide format)之间转换数据,使数据更适合分析或展示。
1. stack 方法
功能:将数据的列索引(column index)“堆叠” 到行索引(row index)上,增加行索引的层级,减少列的数量。
效果:从宽格式转换为长格式。
示例
假设有一个双层列索引的数据框:
import pandas as pd # 创建示例数据 data = { ('A', 'X'): [1, 2], ('A', 'Y'): [3, 4], ('B', 'X'): [5, 6], ('B', 'Y'): [7, 8] } df = pd.DataFrame(data, index=['row1', 'row2']) print("原始数据框:") print(df) # 执行 stack 操作 stacked = df.stack() print("\nStacked 后的数据框:") print(stacked) |
输出结果:
原始数据框: A B X Y X Y row1 1 3 5 7 row2 2 4 6 8 Stacked 后的数据框: A B row1 X 1 5 Y 3 7 row2 X 2 6 Y 4 8 |
解释:
- 原始数据框的列索引有两层(A/B 和 X/Y)。
- stack() 默认将最内层的列索引(X/Y)堆叠到行索引上,形成一个新的 MultiIndex。
2. unstack 方法
功能:将数据的行索引(row index)“展开” 到列索引上,增加列索引的层级,减少行的数量。
效果:从长格式转换为宽格式。
示例
继续使用上面 stacked 后的数据框:
# 执行 unstack 操作 unstacked = stacked.unstack() print("\nUnstacked 后的数据框:") print(unstacked) |
输出结果:
Unstacked 后的数据框: A B X Y X Y row1 1 3 5 7 row2 2 4 6 8 |
解释:
- unstack() 默认将最内层的行索引(X/Y)展开到列索引上,恢复原始数据框的结构。
关键参数
- level:指定要堆叠或展开的索引层级(默认是最后一层,即 level=-1)。
# 展开第一层行索引(level=0) stacked.unstack(level=0) |
- fill_value:指定缺失值的填充值。
应用场景
- 数据重塑:在多层索引的数据中转换观察维度。
- 数据聚合:与 groupby 结合使用,处理复杂的分组统计。
- 可视化准备:将数据转换为适合绘图的格式。
总结
- stack:列 → 行(宽 → 长)。
- unstack:行 → 列(长 → 宽)。
这两个方法是处理复杂索引数据的强大工具,尤其在处理时间序列、面板数据等场景中非常实用。