我有一个 pandas 数据框,其中包含用户 ID 的“subscriber_id”列表和一些其他信息。
我只想选择不在给定列表 A 中的订阅者。
因此,如果我们的数据框包含订阅者 [1,2,3,4,5] 的信息,而我的排除列表是 [2,4,5],我现在应该得到一个包含 [1,3] 信息的数据框
我试过如下使用面具:
temp = df.mask(lambda x: x['subscriber_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
,那么输入必须是 bool 型NDFrame 或数组。 lambda x: x['subscriber_id'] not in subscribers
是一个函数,这就是它引发异常的原因。
这是您可以使用 df.mask
的一种方法,同样使用 isin
来形成 bool 条件:
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
关于python - 通过 id 列表过滤 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23745677/