Python 基于整数的多索引数据帧(K,N)索引

Python 基于整数的多索引数据帧(K,N)索引,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,假设我有一个排序的多索引数据帧: color food one two green ham 0.565738 1.545659 eggs -0.974236 -0.070345 red eggs 1.033801 -2.400454 ham -0.785435 0.462060 pork 0.704228 0.523508 ... 如何检索与第一级的第k个值相关的所有元素。例如,如果K=2,我们将检索

假设我有一个排序的多索引数据帧:

color  food      one        two
green  ham   0.565738  1.545659
       eggs -0.974236 -0.070345
red    eggs  1.033801 -2.400454
       ham  -0.785435  0.462060
       pork  0.704228  0.523508

...
如何检索与第一级第k个值相关的所有元素。例如,如果
K=2
,我们将检索:

red    eggs  1.033801 -2.400454
       ham  -0.785435  0.462060
       pork  0.704228  0.523508
更一般地说,对于多级数据帧,
iloc
的语法是什么

更新: 查看GitHub上的这张票,了解主题的后续信息:

非常完整,阅读和实验是值得的:

按标签选择

In [18]: df.loc[['green']]
Out[18]: 
                 one       two
green ham   0.261355  0.182691
      eggs  0.243253 -0.360223

[2 rows x 2 columns]
如果需要,可以直接使用iloc编制索引

In [24]: df.iloc[0:2]
Out[24]: 
                 one       two
green ham   0.261355  0.182691
      eggs  0.243253 -0.360223

[2 rows x 2 columns]
这将为级别=0上的每个值最多提供第k个(在本例中为2)值

In [35]: df.groupby(level=0).head(2)
Out[35]: 
                 one       two
green ham   0.261355  0.182691
      eggs  0.243253 -0.360223
red   eggs -0.147635  0.555402
      ham   1.815182  0.158497

[4 rows x 2 columns]
这里是第n个值(k-1);如果组没有密钥,则不会为该密钥返回任何内容

In [36]: df.groupby(level=0).nth(2)
Out[36]: 
               one       two
red pork -0.158261 -0.963434

[1 rows x 2 columns]

In [37]: df.groupby(level=0).nth(1)
Out[37]: 
                 one       two
green eggs  0.243253 -0.360223
red   ham   1.815182  0.158497

[2 rows x 2 columns]

假设您正在查找与n级别上的Kth值关联的所有行:

df.xs(df.index.levels[N][K], level=N)

谢谢@Jeff-我真的尝试了很多组合,假设
k=1
,那么
df.iloc[1]
df.xs(1)
都不会给我想要的
df.iloc[1]
只返回一行,
df.xs(1)
返回带有
KeyError
Jeff-我想使用
k
索引,而不是该位置的索引值。换句话说,我希望在这里使用类似于
iloc
的东西。我在OP.Jeff上留下了一条评论-你的第二个答案假设我知道在第一级的索引
k
中第二级有多少个值。当使用随机
k
进行索引时,我不知道这一点。谢谢-尽管我敢说唯一真正做这项工作的是最后一个。在这一点上,我感到惊讶的是
loc['label']
检索了后续级别的所有条目,但
iloc[k]
仅返回一个。使用“label”的指定会命中多个索引,并且它假定为第0级,因此它会满足您的要求,而iloc则不关心索引,因此它只提供一个条目。pandas试图“聪明”(有时可能太聪明)这不是一种稳健的方法,它为我提出了大多数K和N。很好的一点,你需要将level param传递给xs,然后它就可以工作了。我编辑了答案。@AndyHayden是新的解决方案(编辑后)在熊猫中的“犹太”吗?很高兴听到你对这件事的想法。我还向OP添加了一个更新。我仍然不认为我会这样做,因为太容易出现索引错误:S@andy对不起,我迟到了,你能给我举个例子吗?如果使用正确的话,它看起来应该一直有效。。。如果没有,也不用担心。