在python中用字符串匹配替换值?

2024-05-26 07:48:24 发布

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

df:

Item_Key   Item_Name   Delivery_Partner    Ex_Delivery_Partner
10001      Brush       zen                 zen and company
10002      sandle      randv               randv ltd
10003      chemical    ABC                 zen and company
10004      chair       hank                hank solution
10005      shoes       zen                 tour and zen ltd
10006      shoes       XYZ                 tour and zen ltd
10007      ropes       delv.com            delv.com
10008      ropes       hans ltd            delv.com and Enterprises

输出:

Item_Key   Item_Name   Delivery_Partner    Ex_Delivery_Partner
10001      Brush       zen                 zen and company
10002      sandle      randv               randv ltd
10003      chemical    zen                 zen and company
10004      chair       hank                hank solution
10005      shoes       zen                 tour and zen ltd
10006      shoes       zen                 tour and zen ltd
10007      ropes       delv.com            delv.com 
10008      ropes       delv.com            delv.com and Enterprises   

我需要通过在“Ex_Delivery_Partner”中选中名称来替换“Delivery_Partner”名称。 如果没有字符串匹配,则替换为“Ex_Delivery_Partner”


Tags: andcompartneritemcompanyexdelvdelivery
1条回答
网友
1楼 · 发布于 2024-05-26 07:48:24

通过^{}或列表理解中的in语句测试两个列之间的成员关系,然后通过^{}^{}设置新值:

mask = df.apply(lambda x: x['Delivery_Partner'] in x['Ex_Delivery_Partner'], 1)

df['Delivery_Partner'] = df['Delivery_Partner'].where(mask, df['Ex_Delivery_Partner'])
print (df)
   Item_Key Item_Name  Delivery_Partner Ex_Delivery_Partner
0     10001     Brush               zen     zen and company
1     10002    sandle             randv           randv ltd
2     10003  chemical   zen and company     zen and company
3     10004     chair              hank       hank solution
4     10005     shoes               zen    tour and zen ltd
5     10006     shoes  tour and zen ltd    tour and zen ltd
6     10007     ropes          delv.com            delv.com

mask = [x not in y for x, y in df[['Delivery_Partner', 'Ex_Delivery_Partner']].to_numpy()]

df.loc[mask, 'Delivery_Partner'] = df['Ex_Delivery_Partner']
print (df)
   Item_Key Item_Name  Delivery_Partner Ex_Delivery_Partner
0     10001     Brush               zen     zen and company
1     10002    sandle             randv           randv ltd
2     10003  chemical   zen and company     zen and company
3     10004     chair              hank       hank solution
4     10005     shoes               zen    tour and zen ltd
5     10006     shoes  tour and zen ltd    tour and zen ltd
6     10007     ropes          delv.com            delv.com

相关问题 更多 >