Проверяете столбец фрейма данных на членство в списке и добавляете результат? - PullRequest
0 голосов
/ 19 июня 2020

Работа с Pandas DataFrame, df и следующей функцией

def code(x):
    for item in x:
        if x in [21,32]:
            return'Cat A'
        elif x in [22,34]:
            return"Cat B"
        else:
            print ('sorry')

У меня есть DataFrame, df, в котором есть один столбец ('Ref'), содержащий числа

df = 

**Document No**     **Date**.     **Ref**
2018-0212        2019-03-28       71
2018-0212R1      2019-03-28       71
2019-0004        2019-01-11       34
2019-0005        2019-01-14       25

Я sh, чтобы перебрать этот столбец «Ref» с помощью указанной выше функции и вернуть результат в новом столбце, добавленном к df (т. Е. Столбец, который будет содержать «CAT A» или «CAT B, или "Извините"

Я пробовал

df.apply.code(df['Ref'])

безуспешно. Есть мысли? Спасибо

1 Ответ

4 голосов
/ 19 июня 2020

Использование .lo c условий

Это решение довольно простое, каждой строке присваивается значение на основе условия в .loc(). В последней строке используется .fillna() для присвоения значения по умолчанию.

df.loc[df['your_column'].isin([21,32]), 'Category'] = 'CAT A'
df.loc[df['your_column'].isin([22,34]), 'Category'] = 'CAT B'
df['Category'] = df.Category.fillna('Sorry') 

Использование np.select

Это метод, описанный в этом ответе , предложенном @ALollz . Вероятно, это лучший способ продолжить, но он несколько обременительн для простых случаев. данные условия. Параметр default будет использоваться для заполнения там, где не выполнены все условия.

conditions = [df['your_column'].isin([21,32]), df['your_column'].isin([22,34])]
choices = ['CAT A', 'CAT B']
df['Category'] = np.select(conditions, choices, default="Sorry")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...