我有一个自定义函数,该函数接受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)
答案 0 :(得分:0)
所以看起来就像当你这样做:
pd1.apply(gen_cusip_checkbit)
发送给函数的变量包括:
0 912810SE
NAME: 0, DTYPE: OBJECT
此变量的长度为36,可以回答为什么循环进行36次迭代
如果对列运行apply函数:
pd1[0].apply(gen_cusip_checkbit)
要发送的变量就是:
912810SE
应该可以为您提供正确的输出。