通过重复标签从MultiIndex中选择

时间:2017-08-24 16:01:28

标签: pandas

我很难在pandas 0.14.1中选择MultiIndex(我知道这是旧版本,但我的选择是有限的)。

我需要根据索引标签进行选择。

对于一个级别的索引选择罚款重复

(pd.DataFrame
.from_records({'A' : [1,2,3], 'B' : [11,12,13]})
.set_index('A')
).loc[idx[1,1,1,2,1], :]

    B
A    
1  11
1  11
1  11
2  12
1  11

对于多级索引选择以不同方式工作,仅采用唯一值

(pd.DataFrame
.from_records({'A' : [1,2,3], 'B' : [11,12,13], 'C' : [21,22,23]})
.set_index(['A', 'B'])
).loc[idx[[1,1,1,2,1], :], :]

       C
A B     
1 11  21
2 12  22

问题:是否仍然使用多索引但保留单级索引的选择行为?预期输出类似于单个索引,因此,返回5行,而不是2

1 个答案:

答案 0 :(得分:1)

我能想到的最好的。需要注意的是,这会因为很多原因而爆炸,我完全希望你能回来使用"但是这并没有对我的真实数据起作用。"

选项1
这将始终有效,但可能并不总是您所期望的。

pd.concat([df.xs(i, drop_level=False) for i in [1, 1, 1, 2, 1]])

       C
A B     
1 11  21
  11  21
  11  21
2 12  22
1 11  21

选项2
如果您的第一级值不是唯一的,那么这将会中断。

df.iloc[df.index.get_level_values(0).searchsorted([1, 1, 1, 2, 1])]

       C
A B     
1 11  21
  11  21
  11  21
2 12  22
1 11  21