сравнить два столбца, имеющих список строк в пандах - PullRequest
0 голосов
/ 04 июля 2018

У меня есть фрейм данных в пандах, имеющий два столбца, где каждая строка представляет собой список строк, как можно было бы проверить, есть ли совпадение (я) слова в этих двух столбцах в уникальной строке (столбец флага - это желаемый вывод)

A                B            flag

hello,hi,bye     bye, also       1
but, as well     see, pandas     0 

Я пытался

df['A'].str.contains(df['B'])

но я получил эту ошибку

TypeError: 'Series' objects are mutable, thus they cannot be hashed

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете преобразовать каждое значение в отдельные слова с помощью разбиения и set s и проверить пересечение с помощью &, затем преобразовать значения в логические значения - пустые наборы преобразуются в False с и, наконец, преобразовать его в int с - Falses равно 0 с и True равно 1 с.

zipped = zip(df['A'], df['B'])
df['flag'] = [int(bool(set(a.split(',')) & set(b.split(',')))) for a, b in zipped]
print (df)
              A            B  flag
0  hello,hi,bye    bye,also     1
1   but,as well  see,pandas     0

Аналогичное решение:

df['flag'] = np.array([set(a.split(',')) & set(b.split(',')) for a, b in zipped]).astype(bool).astype(int)
print (df)
              A            B  flag
0  hello,hi,bye    bye, also     1
1   but,as well  see, pandas     0

РЕДАКТИРОВАТЬ: Есть некоторые пробелы перед ,, поэтому добавьте map с str.strip, а также удалите пустые строки с filter:

df = pd.DataFrame({'A': ['hello,hi,bye', 'but,,,as well'], 
                   'B': ['bye ,,, also', 'see,,,pandas']})
print (df)

               A             B
0   hello,hi,bye  bye ,,, also
1  but,,,as well  see,,,pandas

zipped = zip(df['A'], df['B'])

def setify(x):
    return set(map(str.strip, filter(None, x.split(','))))

df['flag'] = [int(bool(setify(a) & setify(b))) for a, b in zipped]
print (df)
               A             B  flag
0   hello,hi,bye  bye ,,, also     1
1  but,,,as well  see,,,pandas     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...