Python 使用数据帧从字典中仅选择所需的键

Python 使用数据帧从字典中仅选择所需的键,python,pandas,Python,Pandas,我有一个产品的数据框架和它们的状态如下 数据帧: products status 11 sale 22 sale 33 notsale 44 notsale 55 notsale 66 removed 77 removed 88 notsale 99 sale 222 sale 333 removed 444 removed 555 notsale 我还有一个用户数据字典,里面有一个用户和他们感兴趣的产品列表 {1: [11,22,33,555,33], 2:[33,6

我有一个产品的数据框架和它们的状态如下

数据帧:

products    status
11  sale
22  sale
33  notsale
44  notsale
55  notsale
66  removed
77  removed
88  notsale
99  sale
222 sale
333 removed
444 removed
555 notsale
我还有一个用户数据字典,里面有一个用户和他们感兴趣的产品列表

{1: [11,22,33,555,33], 2:[33,66,77,88,99],3:[11,88,99,222,333,555],4:[333,33,444,44],5:[333,444,22,33,44,55,66]}
我需要做的是,删除状态为
removed
的产品,以及上述词典中用户感兴趣的副本

预期产出:

{1: [11,22,33,555,], 2: [33, 88,99], 3:[11,88,99,222,555], 4: [33, 44], 5: [22, 33,44,55]}
首先按已删除的
值进行筛选,然后在
dict comprehension
中将值转换为
set
以获得唯一值,然后删除
a
的值:

a = df.loc[df['status'] == 'removed', 'products'].tolist()
print (a)
[66, 77, 333, 444]

d = {1: [11,22,33,555,33], 2:[33,66,77,88,99], 
     3:[11,88,99,222,333,555], 4:[333,33,444,44],5:[333,444,22,33,44,55,66]}

d1 = {k: list(set(v)-set(a)) for k, v in d.items()}
print (d1)
{1: [33, 11, 22, 555], 2: [88, 33, 99], 
 3: [11, 555, 99, 222, 88], 4: [33, 44], 5: [33, 44, 22, 55]}
编辑:

对于通过多个Keywor进行过滤,请使用:


如果我必须删除
removed
notsale
??
a = df.loc[df['status'].isin(['removed', 'notsale']), 'products'].tolist()