#python #pandas
#python #pandas
Вопрос:
У меня есть 3 столбца с ключевыми словами, которые были получены с помощью разных алгоритмов.
данные выглядят примерно так
описание продукта1 ключевые слова2 ключевые слова3
ProductX, «бла-бла», [iot, интернет, облако], [облако, интернет, управление энергопотреблением], [интернет вещей, облако, интернет]
Как мне объединить 3 столбца ключевых слов в один, а также удалить все дубликаты, например, ключевые слова «облако» должны храниться только один раз?
Комментарии:
1. пожалуйста, отправьте образец фрейма данных с ожидаемым результатом
Ответ №1:
используйте set()
import pandas as pd
df = pd.DataFrame({'c1':[['a', 'c']], 'c2':[['a', 'd']]})
df['c3'] = (df['c1'] df['c2']).apply(set).apply(list)
df
c1 c2 c3
0 [a, c] [a, d] [d, a, c]
Комментарии:
1. Просто чтобы добавить немного информации о том, «почему ваш ответ — лучший подход», pandas в основном используются при использовании векторизации. Использование цикла for или любого другого последовательного подхода замедлит процесс, а также не даст преимуществ от использования pandas.
2. Использование этого, похоже, также добавляет пустые поля в список… как убедиться, что он не добавляет их, или как мне удалить их из окончательного списка?
3. что вы подразумеваете под пустыми полями? Например, [«, ‘a’] ?
Ответ №2:
Вы можете применить функцию к фрейму данных, которая устанавливает пересечение между тремя столбцами.
df['updatedKeywords'] = df.apply(lambda row: set(row['keyword1']) amp; set(row['keyword2'] amp; set(row['keyword3']), axis=1)
Если у вас было много столбцов для пересечения, вы могли бы расширить его:
columnsToIntersect = ['keyword' str(i) for i in range(numberOfKeywordColumns)]
df['updatedKeywords'] = df.apply(lambda row: set.intersection(*[set(row[x]) for x in columnsToIntersect], axis=1)
Наконец, вы также можете использовать pandas.DataFrame.aggregate, хотя это может быть излишним для такого рода задач.