Как создать новый столбец в пандах из разницы двух строковых столбцов? - PullRequest
0 голосов
/ 13 ноября 2018

Как я могу создать новый столбец в пандах, который является результатом различия двух других столбцов, состоящих из строк?

У меня есть один столбец под названием "Good_Address", который имеет такие записи, как "123 Fake Street Apt101 »и другой столбец под названием« 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'],'')

, но это приводит к ошибкеговоря, что объекты 'Series' являются изменяемыми, поэтому они не могут быть хешированы.

Любая помощь будет оценена.

Спасибо

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Вы можете заменить часть неверного адреса на хороший адрес

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
0 голосов
/ 13 ноября 2018

Я бы использовал функцию, которую мы можем отобразить на входах.Это должно быть быстро.

Функция будет использовать 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
0 голосов
/ 13 ноября 2018

Использование replace с regex

data['Address Difference']=data['GOOD_ADR1'].replace(regex=r'(?i)'+ data['BAD_ADR1'],value="")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...