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

如何在 Pandas 中创建一个新列,该列是由字符串组成的其他两列差异的结果?


我有一个名为“Good_Address”的列,其中包含“123 Fake Street Apt 101”等条目,另一列名为“Bad_Address”,其中包含“123 Fake Street”等条目。我希望“Address_Difference”列中的输出为“Apt101”。


我试过这样做:


import pandas as pd

data = 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'],'')

但这会产生一个错误,指出“系列”对象是可变的,因此它们不能被散列。


任何帮助,将不胜感激。


ABOUTYOU
浏览 237回答 3
3回答

四季花海

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

鸿蒙传说

我会使用一个可以跨输入映射的函数。这应该很快。该函数将用于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 xdf['Address Difference'] = [*map(rm, df.GOOD_ADR1, df.BAD_ADR1)]df          BAD_ADR1                GOOD_ADR1 Address Difference0  123 Fake Street  123 Fake Street Apt 101            Apt 101

牛魔王的故事

您可以从好地址替换坏地址部分df['Address_Difference'] = df['Good_Address'].replace(df['Bad_Address'], '', regex = True).str.strip()    Bad_Address     Good_Address            Address_Difference0   123 Fake Street 123 Fake Street Apt 101 Apt 101
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python