2015-02-26 6 views
2

Я хочу подмножить фрейм данных с пандами в python.Boolean подмножество в 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'])] 

Большое спасибо заранее.

ответ

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 иногда может быть более удобным (и иногда может быть более быстрым для действительно больших кадров.)

+0

просто хочу перезвонить, чтобы упомянуть, что 'df.query (« x in {} ». Format (my_list))' работал мне в прошлом (в случае, когда повторная проверка допустимых значений слишком громоздка) –

+0

@PaulH: для этого вы можете использовать 'df.query (« Y in @my_list »)' вместо построения строки. – DSM

+0

Whoa. Взорвался разум! –

Смежные вопросы