Python 对数据帧中的列应用自定义函数

Python 对数据帧中的列应用自定义函数,python,dataframe,apply,Python,Dataframe,Apply,我有一个自定义函数,它接受8个字符的标识符(CUSIP),并根据一些逻辑生成第9个字符(检查位)。我想将此函数应用于包含8字符标识符的数据帧,并返回包含完整9字符字符串的数据帧 e、 g.2个8字符CUSIP的列表: list1 = [[ '912810SE', '912810SF']] pd1 = pd.DataFrame(list1) print(pd1.apply(gen_cusip_checkbit)) 我期待9点和6点;然而,当将函数应用于df时,我得到了4和2。此外,这应该在函

我有一个自定义函数,它接受8个字符的标识符(CUSIP),并根据一些逻辑生成第9个字符(检查位)。我想将此函数应用于包含8字符标识符的数据帧,并返回包含完整9字符字符串的数据帧

e、 g.2个8字符CUSIP的列表:

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)

所以当你这样做的时候:

pd1.apply(gen_cusip_checkbit)
发送到函数的变量包括:

0    912810SE
NAME: 0, DTYPE: OBJECT
这个变量的长度是36,这就解释了为什么循环有36次迭代

如果对列运行apply函数:

pd1[0].apply(gen_cusip_checkbit)
将发送的变量仅为:

912810SE

这将为您提供正确的输出。

Hi hsaraticus。请同时提供
cusip_alpha
。您好,欢迎来到SO。请提供一个可复制的示例。您的代码不是copy pastabel,因为缺少
cusip\u alpha
的定义。如果您需要更多信息,请参见此处。嘿,您是否可以对列而不是整个数据库执行应用程序,pd1[ColumnName]。apply()抱歉。这里是尖点α的定义:
cusipα=“ABCDEFGHIJKLMNOPQRSTUVWXYZ*@#”