pandas 多重索引

在数据分析和处理过程中,我们经常会遇到多维数据的情况,这时就需要使用多重索引(MultiIndex)来更好地组织和操作数据。pandas库提供了强大的多重索引功能,可以帮助我们处理复杂的数据结构,使数据操作更加灵活和高效。本文将介绍多重索引的概念、创建、索引和操作方法,并通过示例演示其使用。
什么是多重索引
多重索引是指在一个轴上拥有多个索引级别的索引方式。例如,可以在DataFrame的行或列上创建多个层级索引,这样就可以更加灵活地对数据进行分组、筛选和聚合操作。多重索引的每个级别都可以有自己的名称,并且可以使用不同的数据结构来表示不同级别的索引。
创建多重索引
在pandas中,可以通过多种方式创建多重索引,下面介绍几种常用的方法:
使用元组创建MultiIndex对象
可以通过传入元组的方式创建MultiIndex对象,例如:
import pandas as pd
arrays = [
['A', 'A', 'B', 'B'],
[1, 2, 1, 2]
]
index = pd.MultiIndex.from_tuples(list(zip(*arrays)), names=['first', 'second'])
index
运行结果如下:
MultiIndex([('A', 1),
('A', 2),
('B', 1),
('B', 2)],
names=['first', 'second'])
使用from_arrays或from_product方法创建MultiIndex对象
除了直接传入元组外,还可以使用from_arrays或from_product方法创建MultiIndex对象,例如:
import pandas as pd
arrays = [
['A', 'A', 'B', 'B'],
[1, 2]
]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
index
运行结果如下:
MultiIndex([('A', 1),
('A', 2),
('B', 1),
('B', 2)],
names=['first', 'second'])
import pandas as pd
levels = [['A', 'B'], [1, 2]]
index = pd.MultiIndex.from_product(levels, names=['first', 'second'])
index
运行结果如下:
MultiIndex([('A', 1),
('A', 2),
('B', 1),
('B', 2)],
names=['first', 'second'])
设置行或列索引为MultiIndex对象
还可以直接将MultiIndex对象设置为DataFrame的行或列索引,例如:
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], index=index)
df
运行结果如下:
0 1
first second
A 1 1 2
2 3 4
B 1 5 6
2 7 8
多重索引的索引操作
一旦创建了多重索引,就可以使用多种方式对数据进行索引和切片操作,如下所示:
通过元组进行索引
可以使用元组对多重索引进行精确的行或列索引,例如:
import pandas as pd
arr = [
['A', 'A', 'B', 'B'],
[1, 2, 1, 2]
]
index = pd.MultiIndex.from_tuples(list(zip(*arr)), names=['first', 'second'])
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], index=index)
print(df.loc[('A', 1)])
运行结果如下:
0 1
1 2
Name: (A, 1), dtype: int64
通过第一级别索引进行切片
可以使用第一级别的索引进行切片操作,例如:
print(df.loc['A'])
运行结果如下:
0 1
second
1 1 2
2 3 4
通过loc或iloc方法进行切片
还可以使用loc或iloc方法对多重索引进行切片,例如:
print(df.loc[('A',)])
运行结果如下:
0 1
first second
A 1 1 2
2 3 4
多重索引的数据操作
在对多重索引进行索引和切片操作后,还可以使用多种方式进行数据的操作和处理,如下所示:
聚合操作
可以使用多重索引进行分组和聚合操作,例如:
import pandas as pd
arrays = [
['A', 'A', 'B', 'B'],
[1, 2, 1, 2]
]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], index=index)
print(df.groupby('first').sum())
运行结果如下:
0 1
first
A 4 6
B 12 14
数据透视表
可以使用多重索引创建数据透视表,例如:
print(pd.pivot_table(df, values=[0, 1], index=['first'], aggfunc='sum'))
运行结果如下:
0 1
first
A 4 6
B 12 14
重塑数据结构
可以使用多重索引来重塑数据结构,例如:
print(df.unstack())
运行结果如下:
0 1
second 1 2 1 2
first
A 1 3 2 4
B 5 7 6 8
总结
本文介绍了pandas库中多重索引的概念、创建、索引和操作方法,并通过示例演示了多重索引的使用。多重索引能够帮助我们更好地组织和操作多维数据,提高数据处理的灵活性和效率,是数据分析中的重要工具之一。
极客教程