在pandas上的数据框中选择一个重复的多索引

时间:2014-07-29 08:49:07

标签: python pandas

major minor col
0     0     5
      1     6
      2     4
0     0     8
      1     5
      2     6
1     0     3
      1     6
      2     9
1     0     5
      1     1
      2     7

首先,我想

major minor col
0     0     5
      1     6
      2     4
0     0     8
      1     5
      2     6

然后选择两个主要' 0,即选择第一个主要0或第二个:

major minor col
0     0     5
      1     6
      2     4

major minor col
0     0     8
      1     5
      2     6

不幸的是df.xs(0,level=0,drop_level=False)并不完全符合这项工作,因为它会保留索引中的主要内容,尽管是空的。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我仍然不了解您的数据结构。我现在正在使用

                 val
major minor col     
0     0     5      1
      1     6      1
      2     4      1
      0     8      1
      1     5      1
      2     6      1

我仍然不明白你的情况如何两个主要零,因为我只有一个具有相同结构的人。因此,我无法准确地告诉你如何挑选任何* major * s。

使用传统切片,您可以使用

获取df.major == 0
df[df.major == 0]

为了现在选择任何一个子组,它取决于它们的不同之处。他们有另一个独特的功能吗?然后你可以做

df[(df.major == 0) && (df.someColumn == someValue)]

(注意括号)。否则,如果您知道每个组有3行,df[df.major == 0].iloc[:3](或3:)会为您提供记录。

另外,请查看(目前为实验性的)df.query()documentation)。

通常,您可以执行

等操作

df[df.major == 0]获取major为零的所有值。如果它(标记的)索引或普通列无关紧要。你也可以堆叠这些来做

`df [(df.major == 0)

我从

开始
In[264]: df
Out[262]: 
                 val
major minor col     
0     0     5      1
      1     6      1
      2     4      1
      0     8      1
      1     5      1
      2     6      1
1     1     3      1
            6      1
      2     9      1
      1     5      1
            1      1
      2     7      1

然后我做

In[263]: df.query('major == 0')
Out[261]: 
                 val
major minor col     
0     0     5      1
      1     6      1
      2     4      1
      0     8      1
      1     5      1
      2     6      1