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

时间:2014-03-12 19:03:44

标签: 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

...

如何检索与第一级 Kth值相关联的所有元素。例如,如果K=2,我们会检索:

red    eggs  1.033801 -2.400454
       ham  -0.785435  0.462060
       pork  0.704228  0.523508

更一般地说,多级数据框架iloc的语法是什么?

更新

请在GitHub上查看此故障单,以获取有关该主题的跟进:"Awkward" Integer-indexing in MultiIndex DataFrames

2 个答案:

答案 0 :(得分:3)

The indexing docs非常完整,阅读和试验付出了代价:

按标签选择

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]

这将最多为您提供关于level = 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]

答案 1 :(得分:2)

假设您正在寻找与第N 级别的 Kth 值相关联的所有行:

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