簡體   English   中英

在 Python 的 Pandas 中,如何在 MultiIndex 中的字段上過濾 DataFrame

[英]In Python's Pandas, how do I filter a DataFrame on a Field in a MultiIndex

我有這個 DataFrame 有一個 MultiIndex 字段為HiMdLo

import pandas as pd

df = pd.DataFrame(
    [
        ["A", "X", "C", "7", "3"],
        ["A", "B", "C", "7", "2"],
        ["A", "B", "C", "7", "1"],
        ["A", "X", "C", "7", "3"],
        ["1", "2", "3", "7", "3"],
        ["4", "5", "6", "7", "3"],
    ],
    columns=["Hi", "Md", "Lo", "O", "I"],
).set_index(["Hi", "Md", "Lo"])

看起來像這樣

          O  I
Hi Md Lo      
A  X  C   7  3
   B  C   7  2
      C   7  1
   X  C   7  3
1  2  3   7  3
4  5  6   7  3

如何設置過濾器以僅獲取Md值為B的行

我嘗試通過字段名稱

df[df['Md'] == 'B']

這會引發 KeyError,因為“字段”不是列,而是 MultiIndex 的一部分

df[df.index.map(lambda x: x[1] == 'B')]

有效,但非常hacky。

是否有更短的方法來編寫此過濾器,可能使用字段名稱Md或索引 position 1

您可以使用DataFrame.query

df.query("Md == 'B'")

Output

          O  I
Hi Md Lo      
A  B  C   7  2
      C   7  1

替代方案(可能不適用於不同的數據)

df.filter(like='B', axis=0)

這是一種將元組傳遞給df.loc的方法

df.loc[(slice(None),'B',slice(None))]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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