我有一個帶有 3 個級別的 MultiIndex 的 Pandas DataFrame。假設我有以下數據df = pd.DataFrame({'ColB': {('A1', 'B1', 1): 'cb1', ('A1', 'B1', 2): 'cb2', ('A1', 'B2', 1): 'cb3', ('A1', 'B2', 2): 'cb4', ('A2', 'B1', 1): 'cb5', ('A2', 'B1', 2): 'cb6', ('A2', 'B2', 1): 'cb7', ('A2', 'B2', 2): 'cb8'}, 'colA': {('A1', 'B1', 1): 'ca1', ('A1', 'B1', 2): 'ca2', ('A1', 'B2', 1): 'ca3', ('A1', 'B2', 2): 'ca4', ('A2', 'B1', 1): 'ca5', ('A2', 'B1', 2): 'ca6', ('A2', 'B2', 1): 'ca7', ('A2', 'B2', 2): 'ca8'}}) ColB colAA1 B1 1 cb1 ca1 2 cb2 ca2 B2 1 cb3 ca3 2 cb4 ca4A2 B1 1 cb5 ca5 2 cb6 ca6 B2 1 cb7 ca7 2 cb8 ca8現在,我有一個 MultiIndex 對象,其中包含前兩個級別的索引,例如MultiIndex([('A1', 'B2'), ('A2', 'B1')], )我想使用該 MultiIndex 來選擇與該 MultiIndex 對應的所有行,包括第 3 級的所有索引,例如, ColB colAA1 B2 1 cb3 ca3 2 cb4 ca4A2 B1 1 cb5 ca5 2 cb6 ca6我怎樣才能做到這一點?我一直在尋找幾個小時的答案,但我仍然毫無頭緒。謝謝。
3 回答

湖上湖
TA貢獻2003條經驗 獲得超2個贊
使用Index.isin
刪除第 3 級并MultiIndex.droplevel
過濾boolean indexing
:
df = df[df.index.droplevel(2).isin(mux)]
print (df)
? ? ? ? ColB colA
A1 B2 1? cb3? ca3
? ? ? 2? cb4? ca4
A2 B1 1? cb5? ca5
? ? ? 2? cb6? ca6
它適用于任何index:
mux = pd.MultiIndex.from_tuples([('A1', 'B1'),('A2', 'B2')])
df = df[df.index.droplevel(2).isin(mux)]
print (df)
? ? ? ? ColB colA
A1 B1 1? cb1? ca1
? ? ? 2? cb2? ca2
A2 B2 1? cb7? ca7
? ? ? 2? cb8? ca8

拉風的咖菲貓
TA貢獻1995條經驗 獲得超2個贊
咱們試試吧Advanced indexing with hierarchical index
df.loc[('A1', 'B2'):('A2','B1')]
Out[56]:?
? ? ? ? ColB colA
A1 B2 1? cb3? ca3
? ? ? 2? cb4? ca4
A2 B1 1? cb5? ca5
? ? ? 2? cb6? ca6
添加回答
舉報
0/150
提交
取消