![](/img/trans.png)
[英]How do I custom sort against a Pandas Dataframe's MultiIndex?
[英]In Python's Pandas, how do I filter a DataFrame on a Field in a MultiIndex
我有這個 DataFrame 有一個 MultiIndex 字段為Hi , Md , Lo
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.