#python #python-3.x #dataframe
#python #python-3.x #фрейм данных
Вопрос:
Я ищу, присвоена ли категория моему customer_id на основе условия. Как задать значения в новых столбцах из этой функции :
# customers categories based on rfm segmentation
cat = ["champion", "loyal", "big spenders", "almost lost", "hibernating", "lost cheap", "uncategorized"]
def customers_cat(rfm, f, m):
if rfm == '444':
return cat[0]
if f == 4:
return cat[1]
if m == 4 :
return cat[2]
if rfm == '244':
return cat[3]
if rfm == '144':
return cat[4]
if rfm == '111':
return cat[5]
else:
return cat[6]
Чего бы я хотел :
Мой фрейм данных df_cat получает новый столбец df_cat[‘categories’], где значения соответствуют списку cat на основе условия в функции.
df_cat['categories'] = customers_cat(df_cat['rfm_score'],
df_cat['f_score'],
df_cat['m_score'])
Ошибка =>
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Комментарии:
1. Прямо сейчас вы сравниваете целую серию с числом в вашей функции
2. я не совсем понимаю вашу
if else
логику3. Возможно, мне следует добавить предыдущий код, ответ Nihal позволяет добавлять значения.
Ответ №1:
это приведет к чтению фрейма данных строка за строкой. axis=1
если вам нужна строка за строкой, используйте:
df_cat['categories'] = df_cat.apply(lambda row: customers_cat(row['rfm_score'],row['f_score'],row['m_score']), axis=1)
если вы используете только один столбец, тогда вы можете использовать.
df_cat['categories'] = df_cat['rfm_score'].apply(lambda row: customers_cat(row), axis=0)