Python 通过id';s

Python 通过id';s,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,它有一个用户id的“订户id”和一些其他信息的列表 我只想选择不在给定列表a中的订户 因此,如果我们的数据帧包含订阅者[1,2,3,4,5]的信息,而我的排除列表是[2,4,5],那么我现在应该得到一个包含[1,3]信息的数据帧 我试过使用如下面具: c = [1,2,3,4,5] if 5 not in c: print 'YAY' >> YAY temp=df.mask(lambda x:x['subscriber\u id']不在订阅服务器中) 但

我有一个熊猫数据框,它有一个用户id的“订户id”和一些其他信息的列表

我只想选择不在给定列表a中的订户

因此,如果我们的数据帧包含订阅者[1,2,3,4,5]的信息,而我的排除列表是[2,4,5],那么我现在应该得到一个包含[1,3]信息的数据帧

我试过使用如下面具:

c = [1,2,3,4,5]
if 5 not in c:
    print 'YAY'
>> YAY
temp=df.mask(lambda x:x['subscriber\u id']不在订阅服务器中)

但是没有运气

我确信
not in
是有效的Python语法,因为我在下面的列表中测试了它:

c = [1,2,3,4,5]
if 5 not in c:
    print 'YAY'
>> YAY

是否有任何过滤数据帧的建议或替代方法?

您可以使用
isin
方法:

In [30]: df = pd.DataFrame({'subscriber_id':[1,2,3,4,5]})

In [31]: df
Out[31]: 
   subscriber_id
0              1
1              2
2              3
3              4
4              5

[5 rows x 1 columns]

In [32]: mask = df['subscriber_id'].isin([2,4,5])

In [33]: mask
Out[33]: 
0    False
1     True
2    False
3     True
4     True
Name: subscriber_id, dtype: bool

In [34]: df.loc[~mask]
Out[34]: 
   subscriber_id
0              1
2              3

[2 rows x 1 columns]

如果使用
df.mask
,则输入必须是布尔NDFrame或数组
lambda x:x['subscriber_id']不在订阅服务器中
是一个函数,这就是它引发异常的原因

这里有一种方法可以使用
df.mask
,再次使用
isin
来形成布尔条件:

In [43]: df['subscriber_id'].mask(df['subscriber_id'].isin([2,4,5]).values)
Out[43]: 
0     1
1   NaN
2     3
3   NaN
4   NaN
Name: subscriber_id, dtype: float64

如果需要此索引,请使用类似的:

df[df.index.isin([11663533,12022232])]