相关疑难解决方法(0)

pandas:按二级索引的范围切片MultiIndex

我有一个像这样的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)

python pandas

24
推荐指数
3
解决办法
3万
查看次数

Python Pandas通过二级索引(或任何其他级别)切片多索引

关于将多索引的级别[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)

python sorting slice multi-index pandas

8
推荐指数
2
解决办法
7387
查看次数

标签 统计

pandas ×2

python ×2

multi-index ×1

slice ×1

sorting ×1