np.выберите фрейм данных pandas на основе столбца префикса и значений

#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