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)
结果如下:
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
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)
还可以通过指定字典的方式来创建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)
有了这个技术,我们还可以创建一个 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)
Pandas MultiIndex索引工具的应用
针对MultiIndex索引工具,我们可以进行例如: 选取(选取某一个元素)、切片(选取某几个元素)和过滤操作。
选取元素
我们可以使用索引,定位到DataFrame中的某个元素并取出来。例如,我们可以定位到元素data1 的蓝色单元格:
print(df.loc[('data1', 'blue')])
输出结果为:
A -1.769942
B 1.199372
Name: (data1, blue), dtype: float64
切片
我们可以使用 MultiIndex 执行基本的切片操作,例如,使用类型、颜色过滤数据,并从其中获取一些数据。
print(df.loc['data1':'data2'])
输出结果为:
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
过滤
可以使用MultiIndex中的几种技术来过滤数据框的数据。
(1) 还是按照之前DataFrame创建的方式,现在我想要选择颜色为blue的元素:
print(df[df.index.get_level_values('Color') == 'blue'])
输出结果为:
A B
Data Type Color
data1 blue -1.769942 1.199372
data2 blue 0.211997 -1.360243
这里是使用df.index.get_level_values(‘Color’)选择MultiIndex中的一层。然后检查颜色是否为blue
(2) 更加复杂的情况是,我们可以使用 xs()方法来选择单独的索引层:
print(df.xs('blue', level='Color'))
输出结果为:
A B
Data Type
data1 -1.769942 1.199372
data2 0.211997 -1.360243
总结
本文简要介绍了使用MultiIndex将 DataFrame 分层的方法。这种成型的索引是 Pandas 中的一个强大工具,在各种情况下都适用。我们也详细了解了如何使用MultiIndex索引工具:选取元素、切片和过滤。这些技术将对于多层结构的数据的处理非常有用。
极客教程