pandas中多重索引
多重索引
1.多重索引的构建
#待完善
2.多重索引值得获取
- 创建测试数据集
import pandas as pd
import numpy as np
iterables = [['1', '2', '3'], ['bule', 'green']]
arrays = pd.MultiIndex.from_product(iterables, names=['number', 'color'])
use_df = pd.DataFrame(
np.random.randn(6,6),
index = arrays,
columns=arrays
)
print(use_df)
"""
# 输出为
number 1 2 3
color bule green bule green bule green
number color
1 bule 1.318232 0.178030 0.774973 -0.567643 -0.982961 -0.585139
green 1.397289 -0.571675 -2.372952 0.043259 0.385781 -0.232037
2 bule -1.321314 1.523664 0.419699 0.855854 -0.861650 1.089109
green -1.922272 0.219814 -1.032383 0.915663 -1.719036 1.472052
3 bule 0.302781 -1.035551 0.375275 0.792451 -1.590227 -0.925826
green -0.650767 -0.308584 -1.177814 1.757994 -0.413690 0.229166
"""
3.获取行列索引(全部)
print(use_df.index)
print(use_df.index.values)
print(use_df.columns.values)
# 输出
MultiIndex([('1', 'bule'),
('1', 'green'),
('2', 'bule'),
('2', 'green'),
('3', 'bule'),
('3', 'green')],
names=['number', 'color'])
[('1', 'bule') ('1', 'green') ('2', 'bule') ('2', 'green') ('3', 'bule')('3', 'green')]
[('1', 'bule') ('1', 'green') ('2', 'bule') ('2', 'green') ('3', 'bule')('3', 'green')]
- 另外可以通过pandas.MultiIndex.get_level_values(level)方法获取特定级别标签值 的向量,这个向量的长度将等于索引的长度。参数level 是级别在MultiIndex中的整 数位置,或者是级别的名称
print(use_df.index.get_level_values(0)) #第一层位置
print(use_df.index.get_level_values('number')) #第一层标签名称
print(use_df.index.get_level_values(1))
print(use_df.index.get_level_values('color'))
# 输出
Index(['1', '1', '2', '2', '3', '3'], dtype='object', name='number')
Index(['1', '1', '2', '2', '3', '3'], dtype='object', name='number')
Index(['bule', 'green', 'bule', 'green', 'bule', 'green'], dtype='object', name='color')
Index(['bule', 'green', 'bule', 'green', 'bule', 'green'], dtype='object', name='color')
print(use_df['1'].columns.values)#第一层列标签中的1列的第2层列明
print(use_df['2'].columns.values)
print(use_df['1'].index.values)
print(use_df['2'].index.values)
print(use_df[['2','3']].index.values)#第一层列标签中的2,3列的2层行标签值
# 输出
['bule' 'green']
['bule' 'green']
[('1', 'bule') ('1', 'green') ('2', 'bule') ('2', 'green') ('3', 'bule')('3', 'green')]
[('1', 'bule') ('1', 'green') ('2', 'bule') ('2', 'green') ('3', 'bule')('3', 'green')]
[('1', 'bule') ('1', 'green') ('2', 'bule') ('2', 'green') ('3', 'bule')('3', 'green')]
4.取值操作
# 取某一个索引的数据
print(use_df['1'])
print(use_df.loc[:]['1'])
print(use_df['2'])
# 取多个索引的数据
print(use_df[['1','2']])
# 选取复合索引的第一行
print(use_df.loc['1'])
- iloc
print(use_df.iloc[1])
print(use_df.iloc[1]['1'])
print(use_df.iloc[1][1])
# 输出
number color
1 bule 0.919970
green -1.442989
2 bule -0.629463
green 1.040237
3 bule 0.596067
green 0.549045
Name: (1, green), dtype: float64
color
bule 0.919970
green -1.442989
Name: (1, green), dtype: float64
-1.4429891311997716
记录学习的点点滴滴