Pandas如何使用MultiIndex创建DataFrame

Pandas如何使用MultiIndex创建DataFrame

在本文中,我们将介绍如何使用Pandas 的MultiIndex按照层次关系创建DataFrame(数据框),该技术可用于处理复杂的数据信息。MultiIndex层次索引是一个非常强大的工具,可以在多个维度上处理数据。在数据清洗和处理中,MultiIndex是非常方便和实用的。

阅读更多:Pandas 教程

什么是MultiIndex

MultiIndex 是一种多层次的索引方式。在Pandas中,MultiIndex在一个表格中增加了更多的信息,在表格中添加一个或多个层级。例如,一个数据库中的表中包含产品名称、时间、地点、数量和价格等数据。这些信息可以被认为是多层次的索引。如果我们设计一个这样的结构,我们可以根据它的组成部分进行数据操作。

创建具有MultiIndex的DataFrame

创建 MultiIndex 的DataFrame,必须先使用 Pandas 库中的 MultiIndex 类创建一个层次结构的索引对象,它可以指定这个DataFrame 中的每个元素的位置。

下面是一个简单的例子。我们可以使用MultiIndex和Pandas创建一个DataFrame,如下所示:

import pandas as pd
import numpy as np

tuples = [('data1', 'blue'), ('data1', 'green'), ('data2', 'blue'), ('data2', 'green')]
index = pd.MultiIndex.from_tuples(tuples, names=['Data Type', 'Color'])

df = pd.DataFrame(np.random.randn(4, 2), index=index, columns=['A', 'B'])
print(df)
Python

结果如下:

                      A         B
Data Type Color                    
data1     blue    -1.769942  1.199372
          green   -0.844482  0.232415
data2     blue     0.211997 -1.360243
          green    0.763947 -0.488487
Python

MultiIndex除了可以在行上。也可以在列上制定多级索引。

arrays = [['first', 'second', 'second', 'third', 'third'], ['bar', 'bar', 'baz', 'bar', 'baz']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 5), index=['A', 'B', 'C'], columns=index)
print(df)
Python

还可以通过指定字典的方式来创建MultiIndex

data = {'color': ['a', 'a', 'a', 'b', 'b', 'b'], 'status': ['x', 'y', 'z', 'x', 'y', 'z'], 'value': [11, 13, 12, 10, 6, 9]}
df = pd.DataFrame(data).set_index(['color', 'status'])
print(df)
Python

有了这个技术,我们还可以创建一个 Series(数据系列),并在其上设置 MultiIndex,可以将此概念扩展到索引的基本类型中。

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(np.random.randn(8), index=index)
print(s)
Python

Pandas MultiIndex索引工具的应用

针对MultiIndex索引工具,我们可以进行例如: 选取(选取某一个元素)、切片(选取某几个元素)和过滤操作。

选取元素

我们可以使用索引,定位到DataFrame中的某个元素并取出来。例如,我们可以定位到元素data1 的蓝色单元格:

print(df.loc[('data1', 'blue')])
Python

输出结果为:

A   -1.769942
B    1.199372
Name: (data1, blue), dtype: float64
Python

切片

我们可以使用 MultiIndex 执行基本的切片操作,例如,使用类型、颜色过滤数据,并从其中获取一些数据。

print(df.loc['data1':'data2'])
Python

输出结果为:

                      A         B
Data Type Color                    
data1     blue    -1.769942  1.199372
          green   -0.844482  0.232415
data2     blue     0.211997 -1.360243
          green    0.763947 -0.488487
Python

过滤

可以使用MultiIndex中的几种技术来过滤数据框的数据。

(1) 还是按照之前DataFrame创建的方式,现在我想要选择颜色为blue的元素:

print(df[df.index.get_level_values('Color') == 'blue'])
Python

输出结果为:

                      A         B
Data Type Color                    
data1     blue    -1.769942  1.199372
data2     blue     0.211997 -1.360243
Python

这里是使用df.index.get_level_values(‘Color’)选择MultiIndex中的一层。然后检查颜色是否为blue

(2) 更加复杂的情况是,我们可以使用 xs()方法来选择单独的索引层:

print(df.xs('blue', level='Color'))
Python

输出结果为:

                 A         B
Data Type                   
data1     -1.769942  1.199372
data2      0.211997 -1.360243
Python

总结

本文简要介绍了使用MultiIndex将 DataFrame 分层的方法。这种成型的索引是 Pandas 中的一个强大工具,在各种情况下都适用。我们也详细了解了如何使用MultiIndex索引工具:选取元素、切片和过滤。这些技术将对于多层结构的数据的处理非常有用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程