本文共 1723 字,大约阅读时间需要 5 分钟。
层次化索引(Hierarchical Indexing)是Pandas中一个核心功能,它允许在一个轴上定义多个索引级别。这种机制使得处理多维度数据变得更加高效,特别是在数据重塑和分组操作中具有重要作用。
我们可以通过以下代码生成一个带有层次化索引的数据系列:
import pandas as pdimport numpy as np# 随机种子设置np.random.seed(12345)pd.options.display.max_rows = 20# 创建带有层次化索引的数据系列data = pd.Series(np.random.randn(9), index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 3, 1, 2, 2, 3]])
多级索引支持:Pandas允许在一个轴上定义多个索引级别。例如,上述数据的index
属性是一个MultiIndex
,包含两个级别:['a', 'b', 'c', 'd'] 和 [1, 2, 3]。
灵活的数据重塑:层次化索引使得数据重塑变得更加简便。例如,可以通过unstack()
方法将数据从长格式转换为宽格式。
使用unstack()
方法可以将数据重新排列为更易于分析的格式:
data_unstacked = data.unstack()print(data_unstacked)
1 2 3a -0.204708 0.478943 -0.519439b -0.555730 NaN 1.965781c 1.393406 0.092908 NaNd NaN 0.281746 0.769023
stack()
unstack()
的逆运算是stack()
,可以将数据从宽格式转换回长格式:
data_unstacked_stacked = data_unstacked.stack()print(data_unstacked_stacked)
1 2 3a -0.204708 0.478943 -0.519439b -0.555730 NaN 1.965781c 1.393406 0.092908 NaNd NaN 0.281746 0.769023
以下代码创建一个带有层次化索引的DataFrame:
# 创建数据框架frame = pd.DataFrame(np.arange(12).reshape((4, 3)), index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]], columns=[['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']])
# 设置索引和列名frame.index.names = ['key1', 'key2']frame.columns.names = ['state', 'color']
MultiIndex
表示列名# 通过`MultiIndex`表示列名frame['Ohio'] = pd.MultiIndex.from_arrays([['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']], names=['state', 'color'])
层次化索引是一种强大的工具,能够显著提升数据处理和分析效率。在实际应用中,可以通过unstack()
和stack()
等方法灵活地将数据按需重塑,以满足不同场景的分析需求。
转载地址:http://ccrg.baihongyu.com/