[英]Subsetting multi-index Pandas with label and boolean combination
給定一個多索引 dataframe,我如何 select 與索引的一個 label 相關並且在列中具有特定值的所有行?
這是一個示例 dataframe:
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
從中我想 select 所有具有 label xy1的行在Value列中有一個 1。因此,產生這個:
index2 = pd.MultiIndex.from_product([['1','2','3']], names=['Page'])
df2 = pd.DataFrame([1,1,1], index2, columns=['Value'])
df2
我怎樣才能以優雅的方式實現這一目標?
使用DataFrame.query
並通過DataFrame.reset_index
刪除第一級:
df1 = df.query("Tag == 'xy1' & Value == 1").reset_index(level=0, drop=True)
或首先 select 使用DataFrame.xs
第一級,然后按Value
列過濾:
df1 = df.xs('xy1').query("Value == 1")
print (df1)
Value
Page
1 1
2 1
3 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.