为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUX布斯 2022-06-02 15:40:14
我有 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的全部内容时,后者的值变为“未知”。
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

您可以将自定义 lambda 函数从这里传递给np.where:


import re


f = 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    match

0         Coca Cola  Coca Cola  Unknown

1  Coca Cola cherry  Coca Cola  Unknown

2    Coca Cola life  Coca Cola  Unknown

3    Coca Cola Life  Coca Cola  Unknown


查看完整回答
反对 回复 2022-06-02
?
萧十郎

TA贡献1815条经验 获得超13个赞

这是使用 的一种mask方法apply:


testdf['BrandName'] = (testdf.BrandName.mask(testdf.apply(

                                             lambda x: x.BrandName in x.Name, axis=1), 

                                             'Unkown'))


           Name      BrandName

0         Coca Cola    Unkown

1  Coca Cola cherry    Unkown

2    Coca Cola life    Unkown

3    Coca Cola Life    Unkown


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号