为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2023-03-01 16:04:22
我需要基于 pandas 数据框中的 2 列创建新列这是数据框的头部    col_1   col_20   -0.5    H11   -0.5    draw2   -0.5    H33   -0.5    H14   -1.5    H25   -0.5    H17   -2.5    H48   -0.5    A29   -0.5    H112  -1.5    draw13  9.0     draw14  -0.5    draw15  -0.5    A116  -0.5    H117  -0.5    draw18  9.0     draw19  -0.5    draw20  -0.5    H121  -0.5    H222  -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
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

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'

   ...


查看完整回答
反对 回复 2023-03-01
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信