pandas分层索引

文章介绍了如何在Pandas中创建和操作分层索引的数据结构,包括Series和DataFrame。通过示例展示了如何选择、切片和重排数据,以及使用unstack和stack方法转换数据布局。此外,还提到了设置和操作多级列索引的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分层索引

import pandas as pd
import numpy as np

生成数据

data = pd.Series(np.random.randn(9),index=[['a','a','a','b','b','c','c','d','d'],[1,2,3,1,3,1,2,2,3]])
data
a  1    0.269045
   2   -0.885298
   3    0.158806
b  1    0.378847
   3    0.301012
c  1   -1.255018
   2   -1.453824
d  2   -0.088124
   3   -1.746533
dtype: float64
data.index
MultiIndex([('a', 1),
            ('a', 2),
            ('a', 3),
            ('b', 1),
            ('b', 3),
            ('c', 1),
            ('c', 2),
            ('d', 2),
            ('d', 3)],
           )

分层索引

data['b']
1    0.378847
3    0.301012
dtype: float64
data['b':'c']
b  1    0.378847
   3    0.301012
c  1   -1.255018
   2   -1.453824
dtype: float64
data.loc[['b','c']]
b  1    0.378847
   3    0.301012
c  1   -1.255018
   2   -1.453824
dtype: float64

在内部层级中进行选择

data.loc[:, 2]
a   -0.885298
c   -1.453824
d   -0.088124
dtype: float64

使用unstack将数据重新排列

data.unstack()
123
a0.269045-0.8852980.158806
b0.378847NaN0.301012
c-1.255018-1.453824NaN
dNaN-0.088124-1.746533

unstack的反操作为stack

data.unstack().stack()
a  1    0.269045
   2   -0.885298
   3    0.158806
b  1    0.378847
   3    0.301012
c  1   -1.255018
   2   -1.453824
d  2   -0.088124
   3   -1.746533
dtype: float64

分层索引

frame = pd.DataFrame(np.arange(12).reshape((4,3)),index=[['a','a','b','b'],[1,2,1,2]],columns=[['Ohio','Ohio','Colorado'],['Green','Red','Gerrn']])
frame
OhioColorado
GreenRedGerrn
a1012
2345
b1678
291011

添加索引名称

frame.index.names = ['key1','key2']
frame.columns.names = ['state','color']
frame
stateOhioColorado
colorGreenRedGerrn
key1key2
a1012
2345
b1678
291011

列索引

frame['Ohio']
colorGreenRed
key1key2
a101
234
b167
2910
from pandas import MultiIndex

使用MultiIndex创造带有层级的列

MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Gerrn']],names=['state','color'])
MultiIndex([(    'Ohio', 'Green'),
            (    'Ohio',   'Red'),
            ('Colorado', 'Gerrn')],
           names=['state', 'color'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值