выбор на основе комбинаций строк в разных столбцах pandas

python #pandas

#python #pandas

Вопрос:

У меня есть следующий фрейм данных pandas.

 ID  col1 col2    value
1    4    New     20
2    4    OLD     30
3    5    OLD     60
4    5    New     50
5    3    New     70
 

Я хотел бы выбрать только строки, которые имеют следующие правила. из col1 значений 4 и 3 должно быть in New , а 5 должно быть Old in col2 . Удалите другие строки другим способом.

 ID  col1 col2    value
1    4    New     20
3    5    Old     60
5    3    New     70
 

Может ли кто-нибудь помочь с этим в Python pandas?

Ответ №1:

Используйте DataFrame.query с фильтром по in цепочке по amp; для побитового AND и второго условия цепочки по | для побитового OR :

 df1 = df.query("(col1 in [4,3] amp; col2 == 'New') | (col1 == 5 amp; col2 == 'OLD')")
print (df1)
   ID  col1 col2  value
0   1     4  New     20
2   3     5  OLD     60
4   5     3  New     70
 

Или использовать boolean indexing с Series.isin :

 df1 = df[df['col1'].isin([3,4]) amp; df['col2'].eq('New') | 
         df['col1'].eq(5) amp; df['col2'].eq('OLD')]