Pandas详解十三之多级索引MultiIndex(层次化索引)

约定:
import pandas as pd
import numpy as np

多级索引

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

一、Series对象的多级索引

  • 多级索引Series对象的创建
se1=pd.Series(np.random.randn(4),index=[list("aabb"),[1,2,1,2]])
se1

代码结果:

a  1    0.945676
   2    1.240454
b  1    1.021960
   2    0.363063
dtype: float64
  • 子集的选取
se1['a']

代码结果:

1    0.945676
2    1.240454
dtype: float64
se1['a':'b']

代码结果:

a  1    0.945676
   2    1.240454
b  1    1.021960
   2    0.363063
dtype: float64
  • 甚至能内层选取
se1[:,1]

代码结果:

a    0.945676
b    1.021960
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
代码结果:
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
代码结果:
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
代码结果:
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')
代码结果:
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

谢谢大家的浏览,
希望我的努力能帮助到您,
共勉!

猜你喜欢

转载自blog.csdn.net/weixin_38168620/article/details/80071141