сравнить два строковых столбца в кадре данных по строкам - PullRequest
1 голос
/ 19 июня 2020

Описание проблемы: мне нужно установить переменную для каждой строки, но только если она находится в пределах диапазона списка во втором столбце той же строки.

Пример фрейма данных:

df = pd.Dataframe({'col1': ['A', 'T' , 'P', 'Z'], 'col2': ['A, B, C', 'D, E, F' , 'G, H, I, P', 'M, N, R, ZGTR']})

Мне нужно получить все строки, где col1 является частью col2. ожидаемый результат:

col1    col2
'A'     'A, B, C'
'P'     'G, H, I, P'

Мой подход, который возвращает TypeError о том, что объекты Series изменяемы и не могут быть хешированы:

df[df['col2'].str.match(df['col1'])]

Насколько я понимаю, я нужно как-то указать, что сравнение должно производиться в пределах одной строки. Я знаю, что itterrows будет решением, но я бы предпочел что-нибудь без зацикливания.

1 Ответ

2 голосов
/ 19 июня 2020

Использовать понимание списка с тестом in с разделенными значениями:

import pandas as pd

df = pd.DataFrame({'col1': ['A', 'T' , 'P', 'Z'], 
                   'col2': ['A, B, C', 'D, E, F' , 'G, H, I, P', 'M, N, R, ZGTR']})
df = df[[b in a.split(', ') for a, b in df[['col2', 'col1']].values]]
print (df)
  col1        col2
0    A     A, B, C
2    P  G, H, I, P
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...