# pandas -- 基础操作(三) :pandas 层次化索引创建、数据选择
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
pandas 层次化索引, 创建多维数据操作
当数据高于二维时,我们一般用包含多层级索引的Dataframe进行表示,使用多层级索引展示数据更加直观,操作数据更加灵活,并且可以表示3维,4维乃至任意维度的数据。
本章主要内容:利用多层索引的DataFrame来表示多维数据,包括多层索引的创建,数据选择,数据分组以及透视表等。
一、pandas多层化索引
1. 创建多层索引
1.1 隐式构建多层索引
- 指定多层columns索引
df = pd.DataFrame(data = np.random.randint(10,100,size=(9,4)),
index=np.arange(1,10,1),
columns=[['a','a','b','b'],['aa1','aa2','bb1','bb2']])
df
a b
aa1 aa2 bb1 bb2
1 40 56 45 54
2 20 90 77 70
3 90 49 64 76
4 44 40 13 27
5 71 67 16 65
6 43 43 75 31
7 98 38 82 60
8 94 37 36 96
9 57 33 33 89
- 指定多层index转置
df = pd.DataFrame(data = np.random.randint(0,10,size=(2,4)),
index=[['a','b'],['aa','bb']],
columns=['aa1','aa2','bb1','bb2'])
df
aa1 aa2 bb1 bb2
a aa 0 4 2 3
b bb 4 2 8 8
dff = df.T # 转置
dff
a b
aa bb
aa1 0 4
aa2 4 2
bb1 2 8
bb2 3 8
- 多层index和columns
df2 = pd.DataFrame(data= np.random.randint(0,100,size=(5,4)),
index=[['a','a','a','b','b'],['aa1','aa2','aa3','bb1','bb2']],
columns=[['class1','class2','class2','class3'],['A','B','C','D']])
df2
class1 class2 class3
A B C D
a aa1 3 83 70 80
aa2 87 52 36 45
aa3 89 79 4 56
b bb1 12 14 67 19
bb2 6 82 81 40
1.2 pd.MultiIndex 显式构建多层级索引
- from_tuples 方法构建多层级索引
- from_product 方法构建多层级索引
代码详解:
arrays = [list('aaaabbccc'),list('123423123')]
tuples = list(zip(*arrays)) # 需要带*
tuples
[('a', '1'), ('a', '2'), ('a', '3'), ('a', '4'), ('b', '2'), ('b', '3'), ('c', '1'), ('c', '2'), ('c', '3')]
# from_tuples 方法构建多层级索引
df = pd.DataFrame(data=np.random.randint(0,100,size=(9,9)),
index=np.arange(1,10,1),
columns=pd.MultiIndex.from_tuples(tuples, names=['first', 'second']))
df
first a b c
second