Python 使用apply return error基于2列创建新列

Python 使用apply return error基于2列创建新列,python,pandas,Python,Pandas,我需要根据dataframe中的2列创建新列 这是数据帧的头部 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

我需要根据dataframe中的2列创建新列 这是数据帧的头部

    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
  • df.col_2
    类型为
    string
    非系列
  • 列表更改为集合,因为当确定集合中是否存在对象时,集合的速度要快得多
  • 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'
       ...