pandas分层索引

分层索引

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'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值