Как извлечь совпадающие ключевые слова из двух столбцов в кадре данных панд? - PullRequest
3 голосов
/ 27 мая 2019

У меня есть два столбца в кадре данных, оба являются строками, в которых column1 имеет несколько совпадающих ключевых слов в column2. Я хочу извлечь соответствующие ключевые слова из столбца column1 и column2 в новый столбец.

df['column3']=df.column1.apply(lambda x : df.column2[df.column2.str.contains(x)]

Я ожидаю вывод что-то вроде этого

column1                     column2                 column3
A girl is going to market   girl market school      girl market
A girl is going to school   girl market school      girl school
The sky is blue in color    sky blue orange color   sky blue color

Ответы [ 3 ]

4 голосов
/ 27 мая 2019

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

Пример:

df["column3"] = df.apply(lambda x: " ".join(i for i in x["column2"].split() if i in x["column1"]),axis=1) 
print(df)

Выход:

                     column1                column2         column3
0  A girl is going to market     girl market school     girl market
1  A girl is going to school     girl market school     girl school
2   The sky is blue in color  sky blue orange color  sky blue color
3 голосов
/ 27 мая 2019

с использованием np.intersect1d

df['column3'] = df.apply(lambda x: ' '.join(np.intersect1d(x['column1'].split(),x['column2'].split())), axis=1)

Вывод

                     column1                    column2         column3
0  A girl is going to market         girl market school     girl market
1  A girl is going to school         girl market school     girl school
2   The sky is blue in color      sky blue orange color  blue color sky

, если порядок имеет значение

 df['column3'] = df.apply(lambda x: ' '.join(np.array(x['column1'].split())[np.in1d(x['column1'].split(),x['column2'].split())]), axis=1)

Выход

                     column1                    column2         column3
0  A girl is going to market         girl market school     girl market
1  A girl is going to school         girl market school     girl school
2   The sky is blue in color      sky blue orange color  sky blue color
1 голос
/ 27 мая 2019

Другое решение, использующее пересечение (&) из sets:

df['column3'] = df.apply(lambda x: ' '.join(set(x['column1'].split()) &
                                            set(x['column2'].split())), axis=1)

[out]

                     column1                column2         column3
0  A girl is going to market     girl market school     market girl
1  A girl is going to school     girl market school     girl school
2   The sky is blue in color  sky blue orange color  sky color blue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...