亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當它們相似時替換兩列中的值

當它們相似時替換兩列中的值

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 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號