如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?
Posted
技术标签:
【中文标题】如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?【英文标题】:How do I remove rows in dataframe A that contains specific number of values from a column of another dataframe B using pandas? 【发布时间】:2017-05-14 13:30:42 【问题描述】:假设我有一个如下的数据框 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 power t-shirt / reebock shoes”行没有被删除,因为 reebok 和 reebock 属于一个独特的品牌名称 [reebok]。
我怎样才能通过 pandas 完成这项工作?(不使用列表理解) 请帮帮我! :)
【问题讨论】:
【参考方案1】:您可以将boolean indexing
与掩码一起使用。它是由apply
使用 lambda 函数创建的。首先将所有单词转换为Series
,然后将map
转换为d
并比较nunique
的值:
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
【讨论】:
以上是关于如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?的主要内容,如果未能解决你的问题,请参考以下文章