我很难在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
答案 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