#python #pandas #numpy
Вопрос:
Итак, у меня есть два кадра данных
main_df, около 800 строк
Описание | Категория |
---|---|
ABCD | один |
XYZ | три |
азбука | |
QWE |
keyword_df, это около 50 строк
ключевое слово | Категория |
---|---|
AB | пять |
Чего я пытаюсь достичь =
main_df
Описание | Категория |
---|---|
ABCD | один |
XYZ | три |
азбука | пять |
QWE | 0 |
условия = [(main_df[‘Описание’].str.начинается с(‘AB’)) amp; (main_df[‘категория’).isnull()]
значения = keyword_df[‘категория’].список()
main_df[‘категория’] = np.выберите(условия, значения)
Мне удалось создать список строк
[«(main_df[‘описание’].стр.как startswith(‘АБ’)) amp; (main_df[‘категория’).функция isnull()»,
«(main_df[‘описание’].стр.как startswith(‘компакт’)) amp; (main_df[‘категория’).функция isnull()», …]
Но для того, чтобы это работало, это должен быть список условий, а не список строк. Ценю любую помощь!
Ответ №1:
Поскольку у вас есть только 50 строк во фрейме ключевых слов, вы можете просто повторить их и соответствующим образом обновить основной фрейм:
import numpy as np
import pandas as pd
main_df = pd.DataFrame({'description': ['ABCD', 'XYZ', 'ABC', 'QWE'],
'category': ['ONE', 'THREE', np.nan, np.nan]})
keyword_df = pd.DataFrame({'keyword': ['AB'],
'category': ['FIVE']})
for key in keyword_df.itertuples(index=False):
mask = (main_df['description'].str.startswith(key[0])
amp; main_df['category'].isnull())
main_df.loc[mask, 'category'] = key[1]
main_df
description category
0 ABCD ONE
1 XYZ THREE
2 ABC FIVE
3 QWE NaN