簡體   English   中英

子集多索引 Pandas 與 label 和 boolean 組合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM