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']")