繁体   English   中英

将自定义 function 应用于 dataframe 中的列

[英]Applying a custom function to a column in a dataframe

我有一个自定义的 function 接受 8 个字符的标识符(CUSIP),并根据某些逻辑生成第 9 个字符(校验位)。 我想将此 function 应用于由 8 字符标识符组成的 dataframe 并返回带有完整 9 字符字符串的 dataframe。

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

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

pd1 = pd.DataFrame(list1)

print(pd1.apply(gen_cusip_checkbit))

我期待 9 和 6; 但是,将 function 应用于 df 时,我得到 4 和 2。 此外,这应该在 function 中循环 8 次,但是当应用于 df 时,它会循环 36 次。

这是 function:

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)

发送到 function 的变量包括:

0    912810SE
NAME: 0, DTYPE: OBJECT

这个变量的长度是 36,这回答了为什么你的循环有 36 次迭代

如果对列运行 apply function:

pd1[0].apply(gen_cusip_checkbit)

将发送的变量只是:

912810SE

这应该给你正确的 output。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM