Вы можете просто сделать df[df.isin(['john', 'tom'])]
:
df = pd.DataFrame([["John", "Adam", "Eve"], ["Eve", "Adam", "John"]])
df.isin(["John", "Eve"])
# 0 1 2
# 0 True False True
# 1 True False True
Однако не выбранные значения заполняются NaN
:
df[df.isin(["John", "Eve"])]
# 0 1 2
# 0 John NaN Eve
# 1 Eve NaN John
Но все равно работает как маска:
df[df.isin(["John"])] = "john"
df
# 0 1 2
# 0 john Adam Eve
# 1 Eve Adam john
Если вы хотите фильтровать с помощью loc
, вам нужно сначала уменьшить размерность:
df.loc[df.isin(["john", "Eve"]).any(axis=1)]
# 0 1 2
# 0 john Adam Eve
# 1 Eve Adam john
df = pd.DataFrame([["John", "Adam", "Eve"], ["Eve", "Adam", "Alice"]])
df.loc[df.isin(["John", "Eve", "Adam"]).all(axis=1)]
# 0 1 2
# 0 John Adam Eve