python – 使用参数列表删除行pandas

我想删除pandas DataFrame中不在列表中的所有行

例如,考虑这个数据帧:

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
    'year': [2012, 2012, 2013, 2014, 2014], 
    'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa         Cruz', 'Maricopa', 'Yuma'])
df

要按名称删除一行,这很容易:

df = df[df.name != 'Tina'] # to drop the row which include Tina in the name column

但如果我只想保留Jason和Molly这一行:

List=['Jason', 'Molly']
df = df[df.name not in List]

不起作用!

最佳答案 使用
isin并将列表作为arg传递并使用〜反转条件:

In [58]:
names = ['Jason', 'Molly']
df[~df['name'].isin(names)]

Out[58]:
                    name  reports  year
Santa         Cruz  Tina       31  2013
Maricopa            Jake        2  2014
Yuma                 Amy        3  2014
点赞