Как создать новую колонку категорий по ключевым словам в другой колонке?
Колонка plot_keywords содержит ключевые слова, характеризующие сюжет фильма. На основе данных этой колонки надо создать колонку movie_plot_category, которая содержала бы 4 категории в зависимости от ключевых слов в колонке:
- Категория "love_and_death", если ключевые слова содержат и ключевое слово "love" и ключевое слово "death";
- Категория "love", если ключевые слова содержат ключевое слово "love";
- Категория "death", если ключевые слова содержат ключевое слово "death";
- Категория "other", если ключевые слова не соответствуют перечисленным выше условиям.
Так не работает:
m = []
for element in data['plot_keywords']:
m.append(re.findall(r'\blove\b', element))
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Пример:
In [26]: df
Out[26]:
plot_keywords
0 love, death
1 lovely, drama
2 death, thriller
3 sci fiction, utopia, love
4 love, death, ice cream
решение:
love = df["plot_keywords"].str.contains(r"\blove\b")
death = df["plot_keywords"].str.contains(r"\bdeath\b")
df.loc[love, "movie_plot_category"] = "love"
df.loc[death, "movie_plot_category"] = "death"
df.loc[love & death, "movie_plot_category"] = "love_and_death"
df["movie_plot_category"] = df["movie_plot_category"].fillna("other")
альтернативное решение с использованием np.where():
love = df["plot_keywords"].str.contains(r"\blove\b")
death = df["plot_keywords"].str.contains(r"\bdeath\b")
df["movie_plot_category"] = \
np.where(love & death,
"love_and_death",
np.where(love,
"love",
np.where(death,
"death",
"other")))
результат:
In [33]: df
Out[33]:
plot_keywords movie_plot_category
0 love, death love_and_death
1 lovely, drama other
2 death, thriller death
3 sci fiction, utopia, love love
4 love, death, ice cream love_and_death