У меня есть следующая логическая функция, которая сравнивает два значения с несколькими запасными вариантами:
def __score_bool(a, b,
default_element_value_if_null=None,
default_score_if_any_element_is_null=None):
if (default_element_value_if_null is not None):
if (a is None): a = default_element_value_if_null
if (b is None): b = default_element_value_if_null
if a == b:
return 1
if (a is None or b is None) and default_score_if_any_element_is_null:
return default_score_if_any_element_is_null
else:
return 0
Теперь я хотел бы добавить дополнительное поле к фрейму данных, которое сравнивает одно поле со стати c значение Например:
df['score_name'] = df.apply(__score_bool, 'name', 'thomas')
Выше я хотел бы сравнить имя в каждой строке со значением «томас». Например:
Для начала:
>>> import pandas as pd
>>> df = pd.DataFrame([{'name': 'eric'}, {'name': 'thomas'}])
>>> df
name
0 eric
1 thomas
Что я пытаюсь сделать:
name score_name
'eric' 0
'thomas' 1
Как мне это сделать?
Обновление :
Текущий подход, который у меня есть:
df['score_name'] = df.apply(lambda row: __score_bool(row['name'], 'thomas'), axis=1)
Но это кажется очень грубым, если сначала передать его лямбда-функции ( чтобы извлечь строку), а затем передать ее другой функции для извлечения значения столбца. Есть ли более прямой способ сделать это?