使用应用返回错误基于 2 列创建新列

我需要基于 pandas 数据框中的 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'

然后使用 apply 创建新列:


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

它返回一个错误:


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

我需要使用 apply 或任何其他方法创建新列,但我更喜欢创建一个函数然后使用 apply


明月笑刀无情
浏览 118回答 1
1回答

临摹微笑

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'   ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python