假設我們想要過濾具有參考多索引列切片的條件的資料幀,這是一個玩具示例:
import pandas as pd
import numpy as np
ix = pd.IndexSlice
df = pd.DataFrame(data=np.array([[1, 2, 3, None], [None, 2, 3, 4]]).T,
columns=pd.MultiIndex.from_tuples([('a', 'x'), ('b', 'y')]))
# this gives
a b
x y
0 1 None
1 2 2
2 3 3
3 None 4
我想用類似于我的真實用例的條件過濾這個資料框:
df[df.isnull().any(axis=1) | df[ix[:, 'x']].isin([2])]
=> TypeError: unhashable type: 'slice'
甚至:
df[df.isnull().any(axis=1) | df[df.columns[df.columns.droplevel(0).isin(['x'])]].isin([2])]
=> ValueError: cannot join with no overlapping index names
我想應用這樣的過濾標準,但要注意在查找列名時應該忽略列級別 0 的事實。
我也試過:
df[df.isnull().any(axis=1) | df[(slice(None), 'x')].isin([2])]
=> TypeError: unhashable type: 'slice'
uj5u.com熱心網友回復:
第二個條件回傳一列或多列 DataFrame,因此可以any為 Series 掩碼添加:
df1 = df[df.isnull().any(axis=1) | df.xs('x', axis=1, level=1).isin([2]).any(axis=1)]
要么:
df1 = df[df.isnull().any(axis=1) | df.loc[:, ix[:, 'x']].isin([2]).any(axis=1)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455752.html
