Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 按重复标签从多索引中选择_Pandas - Fatal编程技术网

Pandas 按重复标签从多索引中选择

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

我很难从熊猫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.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ᴘᴇᴇᴅ 不可能你说(-);我最喜欢的问题。