我如何在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'],'')
但是这会产生一个错误,指出“系列”对象是可变的,因此不能进行散列。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:3)
将replace
与regex
一起使用
data['Address Difference']=data['GOOD_ADR1'].replace(regex=r'(?i)'+ data['BAD_ADR1'],value="")
答案 1 :(得分:2)
我将使用一个可以跨输入映射的函数。这应该很快。
该函数将使用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
答案 2 :(得分:1)
您可以从好地址替换坏地址部分
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