Pandas 层次化索引

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)
Python

输出结果:

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
Python

在这个例子中,我们使用了两个索引级别来表示数据,第一级别是字母a, b, c, d,第二级别是数字1, 2, 3。这样的索引就是一个层次化索引。

层次化索引的操作

Pandas提供了许多操作层次化索引的方法。我们来看看其中一些常用的方法。

重排层次顺序

在一个多重索引的DataFrame中,我们有时需要交换层次之间的顺序。我们可以使用swaplevel方法来进行重排:

data = data.swaplevel().sort_index()
print(data)
Python

输出结果:

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
Python

在这个例子中,我们使用了swaplevel方法交换了层次顺序并排序。

根据层次进行索引

我们可以使用层次化索引来进行更灵活的索引。例如,我们可以使用切片(slice)来索引某一级别:

print(data.loc[:, 2])
Python

输出结果:

a    1.436559
b    1.747860
c   -0.400733
d   -0.213076
dtype: float64
Python

我们还可以使用布尔数组来过滤数据:

print(data.loc[data > 0])
Python

输出结果:

1  a    1.347102
   b    1.324390
2  a    1.436559
   b    1.747860
3  a    0.130912
Python

层次化索引的统计方法

Pandas中的许多统计方法都支持层次化索引。例如,我们可以使用sum方法来统计某一层的数据:

print(data.sum(level=0))
Python

输出结果:

1    0.200337
2    2.570611
3   -1.374207
dtype: float64
Python

我们还可以使用mean来计算每一层的平均值:

print(data.mean(level=1))
Python

输出结果:

1    0.400779
2    0.642676
3   -0.291602
dtype: float64
Python

层次化索引的数据透视表

我们可以使用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)
Python

输出结果:

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
Python

在这个例子中,我们使用了pd.pivot_table方法来创建一个数据透视表。其中,values参数指定了统计方法的列名,index参数指定了行索引的列名,columns参数指定了列索引的列名。

总结

层次化索引是Pandas中非常实用的一种数据结构,它可以让我们方便地处理多维度的数据。在实际应用中,我们可以使用层次化索引来统计数据、过滤数据和创建数据透视表等。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册