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

如何根据两个字符串列的差异在 Pandas 中创建一个新列?

如何根据两个字符串列的差异在 Pandas 中创建一个新列?

ABOUTYOU 2021-08-17 10:45:17
如何在 Pandas 中创建一个新列,该列是由字符串组成的其他两列差异的结果?我有一个名为“Good_Address”的列,其中包含“123 Fake Street Apt 101”等条目,另一列名为“Bad_Address”,其中包含“123 Fake Street”等条目。我希望“Address_Difference”列中的输出为“Apt101”。我试过这样做:import pandas as pddata = pd.read_csv("AddressFile.csv")data['Address Difference'] = data['GOOD_ADR1'].replace(data['BAD_ADR1'],'') data['Address Difference']但这不起作用。结果似乎正好等于“123 Fake Street Apt101”(上例中的好地址)。我也试过:data['Address Difference'] = data['GOOD_ADR1'].str.replace(data['BAD_ADR1'],'')但这会产生一个错误,指出“系列”对象是可变的,因此它们不能被散列。任何帮助,将不胜感激。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

使用replaceregex

data['Address Difference']=data['GOOD_ADR1'].replace(regex=r'(?i)'+ data['BAD_ADR1'],value="")



查看完整回答
反对 回复 2021-08-17
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我会使用一个可以跨输入映射的函数。这应该很快。


该函数将用于str.find查看另一个字符串是否是子集。如果结果str.find是,-1则无法找到子字符串。否则,根据找到的位置和子串的长度,提取子串。


def rm(x, y):

  i = x.find(y)

  if i > -1:

    j = len(y)

    return x[:i] + x[i+j:]

  else:

    return x


df['Address Difference'] = [*map(rm, df.GOOD_ADR1, df.BAD_ADR1)]


df


          BAD_ADR1                GOOD_ADR1 Address Difference

0  123 Fake Street  123 Fake Street Apt 101            Apt 101


查看完整回答
反对 回复 2021-08-17
?
牛魔王的故事

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

您可以从好地址替换坏地址部分


df['Address_Difference'] = df['Good_Address'].replace(df['Bad_Address'], '', regex = True).str.strip()



    Bad_Address     Good_Address            Address_Difference

0   123 Fake Street 123 Fake Street Apt 101 Apt 101


查看完整回答
反对 回复 2021-08-17
  • 3 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信