用标签和布尔组合子集多索引熊猫

时间:2019-09-20 13:01:49

标签: python pandas

给定一个多索引数据框,我该如何选择与索引的一个标签有关并且在列中具有一定值的所有行?

这是一个示例数据框:

import pandas as pd

index = pd.MultiIndex.from_product([['xy1','xy2','xy3'], ['1','2','3','4','5']], names=['Tag', 'Page'])
df = pd.DataFrame([1,1,1,4,5,1,1,61,4,51,1,1,4,5,1], index, columns=['Value'])
df

我要从中选择所有带有标签 xy1 的行,这些行在 Value 列中具有1。因此,产生此行:

index2 = pd.MultiIndex.from_product([['1','2','3']], names=['Page'])
df2 = pd.DataFrame([1,1,1], index2, columns=['Value'])
df2

我怎样才能优雅地做到这一点?

1 个答案:

答案 0 :(得分:1)

使用DataFrame.query并通过DataFrame.reset_index删除第一级:

df1 = df.query("Tag == 'xy1' & Value == 1").reset_index(level=0, drop=True)

或首先使用DataFrame.xs按第一级进行选择,然后按Value列进行过滤:

df1 = df.xs('xy1').query("Value == 1")
print (df1)
      Value
Page       
1         1
2         1
3         1