基于第二列的Pandas DataFrame过滤

时间:2015-07-09 12:22:01

标签: pandas filter dataframe

我有一个名为names的Pandas Dataframe,如下所示:

name        status
A           X
B           Y
C           Z
D           X

我想获取名称列(例如names['name']),但只能使用不具有状态Y或Z的名称。

所以结果应该是:

name        status
A           X
D           X

我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用isin生成布尔值掩码并使用~取消它:

In [230]:
df[~df['status'].isin(['Y','Z'])]

Out[230]:
  name status
0    A      X
3    D      X

isin的结果:

In [231]:
df['status'].isin(['Y','Z'])

Out[231]:
0    False
1     True
2     True
3    False
Name: status, dtype: bool

然后您可以像这样访问“名称”列:

In [232]:
df.loc[~df['status'].isin(['Y','Z']),'name']

Out[232]:
0    A
3    D
Name: name, dtype: object

答案 1 :(得分:2)

这也有效:

df.loc[(df['status']!='Y') & (df['status']!='Z')]

或者,如果您只想显示名称列中的数据:

df.loc[(df['status']!='Y') & (df['status']!='Z'), 'name']