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对不起,我迟到了,你能给我举个例子吗?如果使用正确的话,它看起来应该一直有效。。。如果没有,也不用担心。