假设我有一个数据帧A如下:
item_name
-------------------------
nike power shoes / 50% off / only today
nike super t-shirt / adidas / cool sale
reebok power t-shirt / reebock shoes
另一个数据框B是品牌词典,它是:
variation | original
nike nike
adidas adidas
reebok reebok
reebock reebok
reeboc reebok
(让我们假设reebock和reeboc是'reebok'的一些变体)
我的问题是我想从数据框A中删除行 根据数据框B包含超过1个品牌 所以我想要的结果如下:
item_name
nike power shoes / 50% off / only today
reebok power t-shirt / reebock shoes
你可以看到只有排“nike super t-shirt / adidas / cool sale” 已被删除,因为我们有[nike]和[adidas]。 重要的是要知道这种逻辑是基于原始品牌,而不是变异部分。 因此,reebok和reebock成为一个独特的品牌名称[reebok],因此“reebok power t-shirt / reebock shoes”排不会被删除。
我如何通过熊猫做这项工作?(不使用列表理解) 请给我帮助! :)
答案 0 :(得分:2)
您可以使用带掩码的boolean indexing
。它由apply
创建,具有lambda函数。首先将所有字词转换为d
,然后将map
转换为d = df2.set_index('variation')['original']
mask = df1.item_name.apply(lambda x: pd.Series(x.split()).map(d).nunique() > 1)
print (mask)
0 False
1 True
2 False
Name: item_name, dtype: bool
print (df1[~mask])
item_name
0 nike power shoes / 50% off / only today
2 reebok power t-shirt / reebock shoes
并比较nunique
值:
Step 4/9: Restore packages (NuGet Installer) (5m:07s)
[Step 4/9] Step Restore packages (NuGet Installer) failed