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
posted @ 2023-04-01 11:58  小杨的冥想课  阅读(134)  评论(0编辑  收藏  举报