pandas中的布尔子集

时间:2015-02-26 17:03:28

标签: python 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'])]

非常感谢提前。

2 个答案:

答案 0 :(得分:5)

您可以使用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有时可能更方便(对于非常大的帧,有时可能更快。)

答案 1 :(得分:2)

是的,有:pandas.DataFrame.isin

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