使用多个isin子句的熊猫索引


问题内容

如果我想一次对多个列进行即时测试,则可以执行以下操作:

>>> from pandas import DataFrame
>>> df = DataFrame({'A': [1, 2, 3], 'B': [1, 4, 7], 'C' : [10, 12, 18]})   
>>> mask = df[['A','B']].isin({'A': [1, 3], 'B': [4, 7, 12]}).all(axis=1)
>>> df = df[mask]

那行得通-是否有更简洁的解决方案?


问题答案:

TBH,您目前的做法对我来说不错;我看不到使用isinfilter改进它的方法,因为看不到如何isin仅使用字典中的列或filter如何充当all

不过,我不喜欢对列名进行硬编码,因此我可能会将其写为

>>> keep = {'A': [1, 3], 'B': [4, 7, 12]}
>>> df[df[list(keep)].isin(keep).all(axis=1)]
   A  B   C
2  3  7  18

或与.loc我一起使用。