Pandas DataFrame:访问多个项目,不等于,=!

Jia*_*ang 17 python pandas

我有以下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
....
Run Code Online (Sandbox Code Playgroud)

现在,让我们说我想在"火车"栏中选择所有项目"DeutscheBahn".

我会用

DB = df[df['Train'] == 'DeutscheBahn']
Run Code Online (Sandbox Code Playgroud)

现在,我如何选择除DeutscheBahn和British Rails以及SNCF之外的所有列车.我怎样才能同时选择不属于这些的项目?

notDB = df[df['Train'] != 'DeutscheBahn']
Run Code Online (Sandbox Code Playgroud)

notSNCF = df[df['Train'] != 'SNCF']
Run Code Online (Sandbox Code Playgroud)

但我不确定如何将这些组合成一个命令.

df[df['Train'] != 'DeutscheBahn', 'SNCF']
Run Code Online (Sandbox Code Playgroud)

不起作用.

Dee*_*ace 26

df[~df['Train'].isin(['DeutscheBahn', 'SNCF'])]
Run Code Online (Sandbox Code Playgroud)

isin返回df['Train']给定列表中的值,并且~开头本质上是一个not运算符.

另一种工作但更长的语法是:

df[(df['Train'] != 'DeutscheBahn') & (df['Train'] != 'SNCF')]
Run Code Online (Sandbox Code Playgroud)


DrG*_*A81 6

我喜欢使用查询方法,因为它更清晰一点

df = df.query("Train not in ['DeutscheBahn', 'British Rails', 'SNCF']")
Run Code Online (Sandbox Code Playgroud)