Pandas 层次化索引
在本文中,我们将介绍Pandas中的层次化索引(也叫多重索引),以及如何使用它们来处理多维度的数据。
阅读更多:Pandas 教程
什么是层次化索引
层次化索引是指在一个轴上有多个等级索引。它可以让我们在一个DataFrame或Series中处理更加复杂的数据,使得我们能够更方便地进行数据的存储和操作。我们来看一个简单的例子:
import pandas as pd
import numpy as np
data = pd.Series(np.random.randn(10),
index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
print(data)
输出结果:
a 1 1.347102
2 1.436559
3 0.130912
b 1 1.324390
2 1.747860
3 -1.557027
c 1 -0.471155
2 -0.400733
d 2 -0.213076
3 0.051907
dtype: float64
在这个例子中,我们使用了两个索引级别来表示数据,第一级别是字母a, b, c, d,第二级别是数字1, 2, 3。这样的索引就是一个层次化索引。
层次化索引的操作
Pandas提供了许多操作层次化索引的方法。我们来看看其中一些常用的方法。
重排层次顺序
在一个多重索引的DataFrame中,我们有时需要交换层次之间的顺序。我们可以使用swaplevel方法来进行重排:
data = data.swaplevel().sort_index()
print(data)
输出结果:
1 a 1.347102
b 1.324390
c -0.471155
2 a 1.436559
b 1.747860
c -0.400733
d -0.213076
3 a 0.130912
b -1.557027
d 0.051907
dtype: float64
在这个例子中,我们使用了swaplevel方法交换了层次顺序并排序。
根据层次进行索引
我们可以使用层次化索引来进行更灵活的索引。例如,我们可以使用切片(slice)来索引某一级别:
print(data.loc[:, 2])
输出结果:
a 1.436559
b 1.747860
c -0.400733
d -0.213076
dtype: float64
我们还可以使用布尔数组来过滤数据:
print(data.loc[data > 0])
输出结果:
1 a 1.347102
b 1.324390
2 a 1.436559
b 1.747860
3 a 0.130912
层次化索引的统计方法
Pandas中的许多统计方法都支持层次化索引。例如,我们可以使用sum方法来统计某一层的数据:
print(data.sum(level=0))
输出结果:
1 0.200337
2 2.570611
3 -1.374207
dtype: float64
我们还可以使用mean来计算每一层的平均值:
print(data.mean(level=1))
输出结果:
1 0.400779
2 0.642676
3 -0.291602
dtype: float64
层次化索引的数据透视表
我们可以使用pivot_table方法来创建一个多层次索引的数据透视表:
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
'B': ['X', 'Y', 'Z'] * 4,
'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
'D': np.random.randn(12),
'E': np.random.randn(12)})
pivot_table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
print(pivot_table)
输出结果:
C bar foo
A B
one X -0.349991 1.323738
Y 0.832658 -1.131247
Z -0.667706 -0.740714
three X 1.233651 NaN
Y NaN -1.073989
Z -0.368404 NaN
two X NaN -1.454274
Y 1.113112 NaN
Z NaN -1.548315
在这个例子中,我们使用了pd.pivot_table方法来创建一个数据透视表。其中,values参数指定了统计方法的列名,index参数指定了行索引的列名,columns参数指定了列索引的列名。
总结
层次化索引是Pandas中非常实用的一种数据结构,它可以让我们方便地处理多维度的数据。在实际应用中,我们可以使用层次化索引来统计数据、过滤数据和创建数据透视表等。
极客教程