将自定义函数应用于数据框中的列

时间:2020-07-07 17:12:28

标签: python dataframe apply

我有一个自定义函数,该函数接受8个字符的标识符(CUSIP),并根据某些逻辑生成第9个字符(校验位)。我想将此功能应用于由8个字符组成的标识符的数据帧,然后将完整的9字符字符串返回给该数据帧。

例如2个8字符的cusips列表:

list1 = [[ '912810SE',
'912810SF']]

pd1 = pd.DataFrame(list1)

print(pd1.apply(gen_cusip_checkbit))

我期望9和6;但是,将函数应用于df时得到4和2。另外,该函数应在函数中循环8次,但应用于df时,它将循环36次。

这是功能:

def gen_cusip_checkbit(cusip):
    cusip=str(cusip).upper()
    sumnum = 0
    for i in range(len(cusip)):
        val = 0
        if cusip[i].isnumeric():
            val = int(cusip[i])
        else:
            val = int(cusip_alpha.find(cusip[i])+10)  # refers to alphabet string for mapping
        if i % 2 != 0:
            val *= 2
        val = (val % 10) + (val // 10)   
        sumnum += val
    return str((10 - (sumnum % 10)) % 10)

1 个答案:

答案 0 :(得分:0)

所以看起来就像当你这样做:

pd1.apply(gen_cusip_checkbit)

发送给函数的变量包括:

0    912810SE
NAME: 0, DTYPE: OBJECT

此变量的长度为36,可以回答为什么循环进行36次迭代

如果对列运行apply函数:

pd1[0].apply(gen_cusip_checkbit)

要发送的变量就是:

912810SE

应该可以为您提供正确的输出。