Я создал словарь с ключом и значением и хочу написать цикл в цикле:
for key,val in dict.items():
def contains(x, y):
result = np.nan
for i in x:
if i.lower() in y.lower():
result = key
return result
df['Test'] = df['Countrylist'].apply(lambda x: contains([val], x))
Итак, я хочу проверить, находится ли значение в словаре в списке стран, и если да, то дать новой проверке столбца значение ключа в словаре.
Но мой код не работает...
Ожидаемый результат:
Countrylist Bla1 Bla2 Test
Germany 12 12 "Here should be the Key of the Dic"
Ваша последняя строка находится внутри функции «содержит» ... это то, что вы намереваетесь?
Ваша последняя строка кода (df['Test'] =...) находится в теле функции под оператором return, поэтому она никогда не запустится. Перемещение функции из цикла и запуск только последней строки в цикле наверное исправит это (хотя трудно обещать без ввода/вывода).
Я отредактировал свой вопрос с ожидаемым результатом
@Leporello Можете ли вы показать мне, как должен выглядеть мой код?
Я пропустил, что функция использует локальную переменную key. Ответ входящий.
Можете показать образец dict ?






За комментарий:
def contains(x, y):
for i in x:
if i.lower() in y.lower():
return True
return False
for key,val in dict.items():
df['Test'] = df['Countrylist'].apply(lambda x: key if contains([val], x) else np.nan)
Опять же, поскольку вы не предоставляете пару ввода/вывода, трудно проверить, делает ли это то, что вы хотите. В частности, contains(['foo', 'bar'], 'FOOTBALL') == True (что может быть тем, что вам нужно, но не очевидно из названия функции).
Кроме того, обратите внимание, что этот код переназначает df['Test'] несколько раз в цикле. Окончательное значение этого столбца зависит от того, какая итерация цикла является последней (на что нельзя полагаться для версий Python <= 3.5-3.6, см. принятый ответ здесь).
Можете ли вы добавить некоторые примеры данных с ожидаемым результатом?