如何使用pandas从另一个数据帧B的列中删除数据帧A中包含特定数量值的行?

2024-04-29 05:18:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个数据帧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

(假设锐步和锐步是“锐步”的一些变体)

我的问题是我想从dataframe中删除行 基于数据帧B,包含一个以上品牌的。 因此,我的预期结果如下:

item_name

nike power shoes / 50% off / only today
reebok power t-shirt / reebock shoes

你可以看到只有排“耐克超级t恤/阿迪达斯/酷卖” 因为我们有[耐克]和[阿迪达斯]。 重要的是要知道这个逻辑是基于原来的品牌,而不是变异的一部分。 因此,由于锐步和锐步属于一个独特的品牌名称[锐步],因此“锐步动力t恤/锐步鞋”一行并未删除。你知道吗

我怎样才能靠熊猫做这项工作?(不使用列表理解) 请帮帮我!:)


Tags: 数据nameonlytodayitempower品牌super
1条回答
网友
1楼 · 发布于 2024-04-29 05:18:56

可以将^{}与掩码一起使用。它是由^{}用lambda函数创建的。首先将所有单词转换为Series,然后将^{}转换为d,并比较^{}值:

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

相关问题 更多 >