根据级别之间的“ AND”条件删除DataFrame的多索引行

Cha*_*lie 5 python multi-index pandas

我希望能够使用多个级别条件(通过逻辑AND连接条件)从多索引数据帧对象中删除行。

考虑以下给出的pandas数据框对象:

import pandas as pd
df = pd.DataFrame(data = [[1,'x'],[2,'x'],[1,'y'],[2,'y']],
                   index=pd.MultiIndex(levels=[['A','B'],['a','b']],
                                       labels=[[0,1,0,1],[0,1,1,0]],
                                       names=['idx0','idx1']))
Run Code Online (Sandbox Code Playgroud)

print(df) 输出:

           0  1
idx0 idx1      
A    a     1  x
B    b     2  x
A    b     1  y
B    a     2  y
Run Code Online (Sandbox Code Playgroud)

我希望消除其中'idx0'=='A' 的行'idx1'=='a',因此最终结果是:

           0  1
idx0 idx1      
B    b     2  x
     a     2  y
A    b     1  y
Run Code Online (Sandbox Code Playgroud)

在我看来,这似乎无法用该df.drop()方法完成。给出正确结果的“回旋”方式是:

df = pd.concat([df.drop(labels='A',level=0),df.drop(labels='a',level=1)])
df = df.drop_duplicates()
Run Code Online (Sandbox Code Playgroud)

但我认为必须有更好的方法...

Ste*_*fan 5

要解决您的问题.drop()-只需将MultiIndex标签传递为tuple

df.drop(('A', 'a'))

           0  1
idx0 idx1      
B    b     2  x
A    b     1  y
B    a     2  y
Run Code Online (Sandbox Code Playgroud)