Pandas系列(十八)- 多重索引

Posted zhangyafei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas系列(十八)- 多重索引相关的知识,希望对你有一定的参考价值。

多级索引

多级索引(也称层次化索引)是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引。
实质上,单级索引对应Index对象,多级索引对应MultiIndex对象。

一、Series对象的多级索引

  • 多级索引Series对象的创建
import pandas as pd
import numpy as np

se1=pd.Series(np.random.randn(4),index=[list("aabb"),[1,2,1,2]])
se1
Out[6]: 
a  1    0.357171
   2    0.084055
b  1   -0.678752
   2    0.132007
dtype: float64
  • 子集的选取
se1[‘a‘]
Out[7]: 
1    0.357171
2    0.084055
dtype: float64
se1[‘a‘:‘b‘]
Out[8]: 
a  1    0.357171
   2    0.084055
b  1   -0.678752
   2    0.132007
dtype: float64 
  • 内层选取

se1[:, 1]
Out[9]: 
a    0.357171
b   -0.678752
dtype: float64
se1[:, 2]
Out[10]: 
a    0.084055
b    0.132007
dtype: float64

二、DataFrame对象的多级索引

  • 创建
df1=pd.DataFrame(np.arange(12).reshape(4,3),index=[list("AABB"),[1,2,1,2]],columns=[list("XXY"),[10,11,10]])
df1
Out[11]: 
     X       Y
    10  11  10
A 1  0   1   2
  2  3   4   5
B 1  6   7   8
  2  9  10  11
  • 赋名
df1.columns.names=[‘XY‘,‘sum‘]
df1.index.names=[‘AB‘,‘num‘]
df1
Out[12]: 
XY      X       Y
sum    10  11  10
AB num           
A  1    0   1   2
   2    3   4   5
B  1    6   7   8
   2    9  10  11
  • 创建MultiIndex对象再作为索引
df1.index=pd.MultiIndex.from_arrays([list("AABB"),[3,4,3,4]],names=["AB","num"])
df1
Out[13]: 
XY      X       Y
sum    10  11  10
AB num           
A  3    0   1   2
   4    3   4   5
B  3    6   7   8
   4    9  10  11
  • 可以对各级索引进行互换
df1.swaplevel(‘AB‘,‘num‘)
Out[14]: 
XY      X       Y
sum    10  11  10
num AB           
3   A   0   1   2
4   A   3   4   5
3   B   6   7   8
4   B   9  10  11

以上是关于Pandas系列(十八)- 多重索引的主要内容,如果未能解决你的问题,请参考以下文章

python--pandas删除

重新索引系列返回 Pandas 中的 NaN

给定一个索引列表,在这些索引处修改 pandas 系列的一个子集

pandas索引取数

介绍 Pandas 实战中一些高端玩法

pandas.DataFrame 最值索引