[英]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.