Pandas 按重复标签从多索引中选择
我很难从熊猫0.14.1的多索引中进行选择(我知道这是旧版本,但我的选择有限) 我需要根据索引标签进行选择。 对于一个级别,索引选择可以重复进行Pandas 按重复标签从多索引中选择,pandas,Pandas,我很难从熊猫0.14.1的多索引中进行选择(我知道这是旧版本,但我的选择有限) 我需要根据索引标签进行选择。 对于一个级别,索引选择可以重复进行 (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.D
(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
这将始终有效,但可能并不总是您所期望的
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
这是不可能的,因为它会引起问题,如何在第二个层次上处理重复。对于级别1中的每个值,是否返回全部?还是1?要退多少?你要求的是不可能的,坦率地说,我很高兴他们没有实现这一点。@COLDSPEED对我来说,很明显,如果在
idx[[1,1,1,2,1],:]中使用:
显式选择all,它应该返回allᴏʟᴅsᴘᴇᴇᴅ 不可能你说(-);我最喜欢的问题。