#python #pandas
#python #pandas
Вопрос:
Я пытаюсь создать функцию, которая принимает a product
и проверяет, содержит ли эта строка категорию в categories
списке. Проверка не должна учитывать регистр, но при обнаружении первого совпадения функция должна возвращать значение, указанное в списке. Если продукт не содержит ни одной из категорий, должна быть возвращена строка ‘Other’.
Пример: if product = Debit card
и categories = ['Account', 'Card', 'Debit']
then assign_category(product, categories)
вернутся Card
.
Это базовый код:
def assign_category(product, categories):
for x in range(len(categories)):
if categories[x] == product:
return product
return 'Other'
Я изо всех сил пытаюсь найти способ, чтобы функция учитывала слово, когда оно точно не введено как таковое.
Список: ['Reporting', 'Card', 'Account', 'Debt', 'Loan', 'Mortgage']
одна запись в списке, которую нужно разбить Debit cards
, так что она должна возвращать Card
любая помощь будет с благодарностью принята.
Комментарии:
1. пожалуйста, вставьте некоторые примеры данных и ожидаемый результат
Ответ №1:
Используйте title()
для проверки без учета регистра и используйте in
для поиска категории в продукте. Вы также должны возвращать категорию, а не продукт. return 'Other'
Statment должен быть вне цикла ‘for’. вот так:
def assign_category(product, categories):
for x in range(len(categories)):
if categories[x] in product.title():
return categories[x]
return 'Other'
Я также рекомендую перебирать categories
, а не range(len(categories))
(избыточно в соответствии с вопросом) следующим образом:
def assign_category(product, categories):
for category in categories:
if category in product.title():
return category
return 'Other'
Ответ №2:
Вы хотите сравнить как продукт, так и категорию в нижнем регистре
categories = ['Reporting', 'Card', 'Account', 'Debt', 'Loan', 'Mortgage']
def assign_category(product, categories):
product = product.lower()
for category in categories:
if category.lower() in product:
return category
return 'Other'
>>> assign_category("Debit card", categories)
'Card'