создать новый столбец на основе 2 столбцов, используя применить ошибку возврата - PullRequest
0 голосов
/ 11 июля 2020

Мне нужно создать новый столбец на основе 2 столбцов в pandas кадре данных Это заголовок кадра данных

    col_1   col_2
0   -0.5    H1
1   -0.5    draw
2   -0.5    H3
3   -0.5    H1
4   -1.5    H2
5   -0.5    H1
7   -2.5    H4
8   -0.5    A2
9   -0.5    H1
12  -1.5    draw
13  9.0     draw
14  -0.5    draw
15  -0.5    A1
16  -0.5    H1
17  -0.5    draw
18  9.0     draw
19  -0.5    draw
20  -0.5    H1
21  -0.5    H2
22  -3.5    A1

Я создал функцию:

def H(d):
    if d['col_1'] == -0.5 & d['col_2'].isin(['H1', 'H2', 'H3', 'H4', 'H5+']):
        return 'W -0.5'
    elif d['col_1'] == -0.5 & d['col_2'].isin(['A1', 'A2', 'A3', 'A4', 'A5+', 'draw']):
        return 'L -0.5'
    elif d['col_1'] == -1.5 & d['col_2'].isin(['H2', 'H3', 'H4', 'H5+']):
        return 'W -1.5'
    elif d['col_1'] == -1.5 & d['col_2'].isin(['A1', 'A2', 'A3', 'A4', 'A5+', 'draw', 'H1']):
        return 'L -1.5'
    elif d['col_1'] == -2.5 & d['col_2'].isin(['H3', 'H4', 'H5+']):
        return 'W -2.5'
    elif d['col_1'] == -2.5 & d['col_2'].isin(['A1', 'A2', 'A3', 'A4', 'A5+', 'draw', 'H1', 'H2']):
        return 'L -2.5'
    elif d['col_1'] == -3.5 & d['col_2'].isin(['H4', 'H5+']):
        return 'W -3.5'
    elif d['col_1'] == -3.5 & d['col_2'].isin(['A1', 'A2', 'A3', 'A4', 'A5+', 'draw', 'H1', 'H2', 'H3']):
        return 'L -3.5'
    else:
        return 'und'

затем использовал применить для создания нового столбца:

df['new_col'] = df.apply(H, axis=1)

он возвращает ошибку:

AttributeError: ("'str' object has no attribute 'isin'", 'occurred at index 0')

Мне нужно создать новый столбец с помощью apply или любого другого метода, но я предпочитаю создать функцию затем с помощью apply

1 Ответ

1 голос
/ 11 июля 2020
  • df.col_2 имеет тип string not series
  • Change list to set , потому что наборы значительно быстрее, когда дело доходит до определения того, объект присутствует в наборе.
def H(d):
    if d['col_1'] == -0.5 and d['col_2'] in {'H1', 'H2', 'H3', 'H4', 'H5+'}:
        return 'W -0.5'
    elif d['col_1'] == -0.5 and d['col_2'] in {'A1', 'A2', 'A3', 'A4', 'A5+', 'draw'}:
        return 'L -0.5'
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...