如何使用pandas删除数据框A中的行,其中包含来自另一个数据框B的列的特定数量的值?

时间:2016-12-30 08:22:23

标签: python pandas dictionary indexing dataframe

假设我有一个数据帧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”排不会被删除。

我如何通过熊猫做这项工作?(不使用列表理解) 请给我帮助! :)

1 个答案:

答案 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