我有以下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)
我喜欢使用查询方法,因为它更清晰一点
df = df.query("Train not in ['DeutscheBahn', 'British Rails', 'SNCF']")
Run Code Online (Sandbox Code Playgroud)