Создайте новый столбец на основе условия, примененного из двух других строковых столбцов в python - PullRequest
0 голосов
/ 11 мая 2018

У меня есть данные в следующем формате:

pastLocation | currentLocation    
delhi        | bangalore          
delhi        | london,pune,delhi  
mumbai       | mumbai             
pune         | pune, noida       

Мне нужно создать новый столбец с именем changeInLocation, где, если в currentLocation присутствует pastLocation, тогда значение нового столбца будет 0, в противном случае 1. Например, во второй строке pastLocation, т. Е. Дели присутствует в соответствующем currentLocation, поэтому значение changeInLocation должно быть 0

Вывод должен быть в следующем формате:

pastLocation | currentLocation   | changeInLocation
delhi        | bangalore         | 1
delhi        | london,pune,delhi | 0
mumbai       | mumbai            | 0
pune         | pune, noida       | 0

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Аналогично решению Jezrael, но при этом необходимо удалить пробелы и использовать set для производительности:

import pandas as pd

df = pd.DataFrame({'pastLocation': ['delhi', 'delhi', 'mumbai', 'pune'],
                   'currentLocation': ['bangalore', 'london,pune,delhi',
                                       'mumbai', 'pune, noida']})

sets = [{i.strip() for i in row} for row in df['currentLocation'].str.split(',').values]

df['changeInLocation'] = [int(past not in current) for past, current in \
                          zip(df['pastLocation'], sets)]

print(df)

     currentLocation pastLocation  changeInLocation
0          bangalore        delhi                 1
1  london,pune,delhi        delhi                 0
2             mumbai       mumbai                 0
3        pune, noida         pune                 0
0 голосов
/ 11 мая 2018

Аналогичное решение для Jezrael (которое в любом случае является более полным), но без приведения:

df['changeInLocation']=df.apply(lambda x: 1 if x['pastLocation'] in x['currentLocation'] else 0, axis=1)
0 голосов
/ 11 мая 2018

Используйте apply с in для проверки членства, а затем приведите к int:

df['changeInLocation'] = df.apply(lambda x: x['pastLocation'] not in x['currentLocation'], axis=1).astype(int)

Еще одно решение из zip столбцов и использование list comprehension:

df['changeInLocation'] = [int(a not in b) for a, b in zip(df['pastLocation'], df['currentLocation'])]

print (df)
  pastLocation    currentLocation  changeInLocation
0        delhi          bangalore                 1
1        delhi  london,pune,delhi                 0
2       mumbai             mumbai                 0
3         pune        pune, noida                 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...