使用多个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,您目前的做法对我来说不错;我看不到使用isin
或filter
改进它的方法,因为看不到如何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
我一起使用。