Dataframe сравнивает два элемента с функцией - PullRequest
1 голос
/ 18 марта 2020

У меня есть следующая логическая функция, которая сравнивает два значения с несколькими запасными вариантами:

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)

Но это кажется очень грубым, если сначала передать его лямбда-функции ( чтобы извлечь строку), а затем передать ее другой функции для извлечения значения столбца. Есть ли более прямой способ сделать это?

1 Ответ

2 голосов
/ 18 марта 2020

IIU C, вы можете сделать:

df['score_name'] = df['name'].apply(__score_bool, b='thomas')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...