我有一个像这样的MultiIndex系列:
import numpy as np
import pandas as pd
buckets = np.repeat(['a','b','c'], [3,5,1])
sequence = [0,1,5,0,1,2,4,50,0]
s = pd.Series(
np.random.randn(len(sequence)),
index=pd.MultiIndex.from_tuples(zip(buckets, sequence))
)
# In [6]: s
# Out[6]:
# a 0 -1.106047
# 1 1.665214
# 5 0.279190
# b 0 0.326364
# 1 0.900439
# 2 -0.653940
# 4 0.082270
# 50 -0.255482
# c 0 -0.091730
Run Code Online (Sandbox Code Playgroud)
我想得到s ['b']值,其中第二个索引(' sequence')在2到10之间.
在第一个索引上切片工作正常:
s['a':'b']
# Out[109]:
# bucket value
# a 0 1.828176
# 1 0.160496
# 5 0.401985 …Run Code Online (Sandbox Code Playgroud) 关于将多索引的级别[0]切换为级别1的范围有很多帖子.但是,我无法找到解决问题的方法; 也就是说,我需要level [0]索引值的1级索引范围
dataframe:首先是A到Z,Rank是1到400; 我需要每个级别[0](第一个)的前2个和后2个,但不是在同一个步骤中.
Title Score
First Rank
A 1 foo 100
2 bar 90
3 lime 80
4 lame 70
B 1 foo 400
2 lime 300
3 lame 200
4 dime 100
Run Code Online (Sandbox Code Playgroud)
我试图用下面的代码获取每个1级索引的最后2行,但它仅适用于第一级[0]值.
[IN] df.ix[x.index.levels[1][-2]:]
[OUT]
Title Score
First Rank
A 3 lime 80
4 lame 70
B 1 foo 400
2 lime 300
3 lame 200
4 dime 100
Run Code Online (Sandbox Code Playgroud)
我通过交换索引得到的前两行,但我不能使它适用于最后两行.
df.index = df.index.swaplevel("Rank", "First")
df= df.sortlevel() #to sort by Rank …Run Code Online (Sandbox Code Playgroud)