#python #python-3.x #pandas #dataframe
#python #python-3.x #pandas #фрейм данных
Вопрос:
import pandas as pd
df = pd.DataFrame({'Environment': [['AppleOS X','postgres','Apache','tomcat']], 'Description': [['Apache', 'Commons', 'Base32', 'decoding', 'invalid', 'rejecting', '.', 'via','valid', '.']] })
Environment Description
0 [AppleOS X, postgres, Apache, tomcat] [Apache, Commons, Base32, decoding, invalid, rejecting, ., via, valid, .]
Я новичок в Pandas и фреймах данных, и я сомневаюсь в нахождении пересечения двух столбцов, упомянутых выше.
Цель:
Среда и описание — это два столбца в фрейме данных. Цель состоит в том, чтобы создать новый столбец с пересечением строк, присутствующих в первых двух столбцах.
Существующая реализация:
def f(param):
return set.intersection(set(param['Environment']),set(param['Description']))
df['unique_words'] = df.apply(f, axis=1)
print(df['unique_words'])
Этот синтаксис пересечения наборов — это то, на что я ссылался в https://www.kite.com/python/answers/how-to-find-the-intersection-of-two-lists-in-python
Проблема:
Я не уверен, как работает приведенный выше синтаксис, но он возвращает с {}
Ожидаемый результат:
Поскольку [‘Apache’] присутствует в обоих столбцах, это должно быть значение в новом столбце, созданном в фрейме данных.
Пожалуйста, дайте мне знать, если кто-нибудь выполнил аналогичную функцию, или любая помощь приветствуется.
Ответ №1:
- использовать
set.intersection
map
значения в списке в нижнем регистре- С точки зрения обработки естественного языка, все значения списка должны быть преобразованы в нижний регистр.
# assumes only the two columns in the dataframe
df['common_words'] = df.apply(lambda x: list(set(map(str.lower, x[0])).intersection(map(str.lower, x[1]))), axis=1)
# if there are many columns, specify the two desired columns to compare
df['common_words'] = df[['Environment', 'Description']].apply(lambda x: list(set(map(str.lower, x[0])).intersection(map(str.lower, x[1]))), axis=1)
# display(df)
Environment Description common_words
0 [AppleOS X, postgres, Apache, tomcat] [Apache, Commons, Base32, decoding, invalid, rejecting, ., via, valid, .] [apache]
Комментарии:
1. Трентон Маккинни: Спасибо, это помогло! 🙂