猿问

当它们相似时替换两列中的值

我有 2 列;名称品牌名称。第一列包含产品名称等值,而第二列是产品的品牌名称。在某些情况下,它们的名称相似——例如,可口可乐。

在上图中,您可以确切地看到我在说什么。我将留下一段代码用于测试目的:


data = [['Coca Cola', 'Coca Cola'], ['Coca Cola cherry', 'Coca Cola'], ['Coca Cola life', 'Coca Cola'], ['Coca Cola Life', 'Coca Cola']]

testdf = pd.DataFrame(data, columns = ['Name', 'BrandName'])

我要做的是将列BrandName中的每个值设置为“未知”,只要产品名称包含与品牌名称相同的单词。以上图为例。我只能使用以下代码将第一行的品牌名称设置为“未知”:


testdf["BrandName"] = np.where(testdf["Name"] == testdf["BrandName"], "Unknown", testdf["BrandName"])

但是,我还没有弄清楚如何以某种方式设置条件,因此当Name包含列BrandName的全部内容时,后者的值变为“未知”。


HUX布斯
浏览 119回答 2
2回答

一只名叫tom的猫

您可以将自定义 lambda 函数从这里传递给np.where:import ref = lambda x: bool(re.search(r'\b{}\b'.format(x['BrandName']), x['Name']))testdf['match'] = np.where(testdf.apply(f, axis = 1), "Unknown", testdf["BrandName"])print (testdf)               Name  BrandName    match0         Coca Cola  Coca Cola  Unknown1  Coca Cola cherry  Coca Cola  Unknown2    Coca Cola life  Coca Cola  Unknown3    Coca Cola Life  Coca Cola  Unknown

萧十郎

这是使用 的一种mask方法apply:testdf['BrandName'] = (testdf.BrandName.mask(testdf.apply(                                             lambda x: x.BrandName in x.Name, axis=1),                                              'Unkown'))           Name      BrandName0         Coca Cola    Unkown1  Coca Cola cherry    Unkown2    Coca Cola life    Unkown3    Coca Cola Life    Unkown
随时随地看视频慕课网APP

相关分类

Python
我要回答