pandas 中的布尔子集

Boolean subset in pandas

我想在 python 中使用 pandas 对数据框进行子集化。

目前我正在使用

df_update = df[(df.X == 1) & ((df.Y == 'A') | (df.Y == 'B') | (df.Y == 'C'))]

有没有办法将代码简化为:

df_update = df[(df.X == 1) & (df.Y in ['A', 'B', 'C'])]

非常感谢。

是的,有:pandas.DataFrame.isin

df_update = df[(df.X == 1) & df.Y.isin(['A', 'B', 'C'])]

您可以使用 isin,或新的 query 语法:

>>> df = pd.DataFrame({"X": [1,1,2,1,1], "Y": ["A","D","B","C", "D"]})
>>> df[(df.X == 1) & df.Y.isin(["A","B","C"])]
   X  Y
0  1  A
3  1  C
>>> df.query("X == 1 and Y in ['A','B','C']")
   X  Y
0  1  A
3  1  C

isin 可能会更快,尤其是对于小帧; query 有时会更方便(对于非常大的帧有时会更快。)