Python多重索引:IndexSlice的用法

笔者最近学习< Machine Learning for Algorithmic Trading >的时候遇到了如下代码,不太了解其中意思,经过学习领悟些许,写此篇以作记录,鉴于本人水平有限,不足之处欢迎批评指正:

idx = pd.IndexSlice
df = df.loc[idx[:, start: end], :] 
# start and end don't mean anything special

经了解,IndexSlice适用于多重索引情况下的切片操作,接下来举例说明,例子参考StackOverflow,链接在文末。

index1 = range(0,5)
index2 = list('abc')
index3 = ['I', 'II', 'III', 'IV']
index0 = pd.MultiIndex.from_product([index1, index2,index3])
df = pd.DataFrame(
    np.random.random([len(index0),2]), 
    index=index0, 
    columns=['col1', 'col2'])
df.head(12)

结果如下,可以看到比较清楚的多层索引结构:
在这里插入图片描述
在单索引条件下我们一般使用loc或iloc来且进行切片操作,然而如果在多重索引条件下则写法如下,这是因为loc函数内不允许直接进行colons操作

df.loc[(slice(0, 3, None), slice('a', 'c', None)),[ 'col1']].head(12)
#这里如果'col1'不加[],结果就是series格式而非dataframe

#错误写法
df.loc[[0:3, 'a':'b'], ['col1']] 

在这里插入图片描述

而使用IndexSlice则使表达更加高效和易于理解:

idx = pd.IndexSlice
df.loc[idx[0:3, 'a':'b'],[ 'col1']] 
#可以得到与上式相同的结果

总结:IndexSlice其实就是为了方便多重索引进行的操作,可以较为方便的划定范围。

df.loc[idx[0:3, 'a':'c', 'I':'II'], ['col1']].head(12)

在这里插入图片描述

IndexSlice讲解(StackOverflow)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值