给定一个多索引数据框,我该如何选择与索引的一个标签有关并且在列中具有一定值的所有行?
这是一个示例数据框:
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
我怎样才能优雅地做到这一点?
答案 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