Pandas векторизованных операций сравнения строк с 2 столбцами - PullRequest
0 голосов
/ 07 августа 2020
import pandas as pd

df = pd.DataFrame({
    'Route': pd.Categorical(["ChicagoVenice", "MiamiAtlanta", "BirminghamLondon", "BostonRome"]),
    'City1': pd.Categorical(["Venice", "Miami", "London", "Boston"]),
    })
              Route   City1
0     ChicagoVenice  Venice
1      MiamiAtlanta   Miami
2  BirminghamLondon  London
3        BostonRome  Boston

Я хотел бы вычислить другой столбец City2, который сравнивает Route с City1 и извлекает оставшуюся строку.

              Route   City1       City2
0     ChicagoVenice  Venice     Chicago
1      MiamiAtlanta   Miami     Atlanta
2  BirminghamLondon  London  Birmingham
3        BostonRome  Boston        Rome

Я думал об использовании string.split () с numpy .vectorize (), но я не мог понять, как правильно применить это к 2 столбцам.

def get_city2(route, city1):
    route_split = route.split(city1)
    city2 = ''.join(route_split).split()[0]
    return city2

df['City2'] = np.vectorize(get_city2)(df['Route'], df['City1'])[1]

Мой результат не совсем то, что я хочу: - (

              Route   City1    City2
0     ChicagoVenice  Venice  Atlanta
1      MiamiAtlanta   Miami  Atlanta
2  BirminghamLondon  London  Atlanta
3        BostonRome  Boston  Atlanta

Есть ли у кого-нибудь идеи, как решить эту проблему без цикла? Я бы предпочел аккуратное векторизованное решение, если это возможно.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

Как насчет этого?

df['City2']=df.apply(lambda x : x.Route.replace(x.City1,''),axis=1)
0 голосов
/ 07 августа 2020

Я получил это сам, с функциями на самом деле все в порядке, была небольшая ошибка в назначении np.vectorize.

Теперь он работает как шарм. : -)

df['City2'] = np.vectorize(get_city2)(df['Route'], df['City1'])

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...