Pandas DataFrame: доступ к нескольким элементам, не равным, =!

У меня есть следующий Pandas объект DataFrame df. Это график поездов, в котором указаны дата отправления, запланированное время отправления и поездка.

import pandas as pd
df = 

            Year  Month DayofMonth  DayOfWeek  DepartureTime Train    Origin
Datetime
1988-01-01  1988    1     1         5        1457      BritishRail   Leeds
1988-01-02  1988    1     2         6        1458      DeutscheBahn  Berlin
1988-01-03  1988    1     3         7        1459      SNCF           Lyons
1988-01-02  1988    1     2         6        1501      BritishRail   Ipswich
1988-01-02  1988    1     2         6        1503      NMBS          Brussels
....

Теперь, скажем, я хотел выбрать все предметы "DeutscheBahn" в колонке "Поезд".

Я бы использовал

DB = df[df['Train'] == 'DeutscheBahn']

Теперь, как я могу выбрать все поезда, кроме DeutscheBahn и British Rails и SNCF. Как я могу одновременно выбирать элементы, а не такие?

notDB = df[df['Train'] != 'DeutscheBahn']

и

notSNCF = df[df['Train'] != 'SNCF']

но я не уверен, как объединить их в одну команду.

df[df['Train'] != 'DeutscheBahn', 'SNCF']

не работает.

Ответ 1

df[~df['Train'].isin(['DeutscheBahn', 'SNCF'])]

isin возвращает значения в df['Train'], которые находятся в данном списке, а ~ в начале по существу является оператором not.

Еще один рабочий, но более длинный синтаксис:

df[(df['Train'] != 'DeutscheBahn') & (df['Train'] != 'SNCF')]

Ответ 2

Мне нравится использовать метод запроса, так как он более понятен

df = df.query("Train not in ['DeutscheBahn', 'British Rails', 'SNCF']")