我如何使用一个df的多列输入到一个函数?



我有一个充满数值的数据帧。我想应用一个函数(delta)它有6个参数

calls['delta'] = calls[['callput','underlyinglast','strike','yte','rfr','hvol90']].apply(delta,axis=1)

我一直得到错误

TypeError: delta() missing 5 required positional arguments: 'S', 'K', 't', 'r', and 'sigma'

我也尝试了lambda的变体,但我一直得到错误。我想是因为它试图将函数应用于每个单独的值,而不是行。

我可以用其他方法吗?(没有迭代,它很慢,它的df有500k行)

applywithaxis=1为每一行调用您的函数,但有一个参数:行作为Series对象。因此,你要么需要修改你的函数定义,接受单行而不是多个参数,要么将你的函数调用包装在一个lambda函数中,该函数从每行提取值并使用它们调用函数。

  1. 修改你的函数取单行
    代替:

    def delta(S, K, t, r, sigma):
    # ... 
    

    这样做:

    def delta(row):
    S, K, t, r, sigma = row.tolist()
    # ...
    

  2. 在lambda函数中封装函数调用
    代替:

    calls['delta'] = calls[['callput','underlyinglast','strike','yte','rfr','hvol90']].apply(delta,axis=1)
    

    这样做:

    calls['delta'] = calls[['callput','underlyinglast','strike','yte','rfr','hvol90']].apply(lambda row: delta(*row), axis=1)
    

    (这里的技巧是使用lambda row: delta(*row)而不仅仅是delta;*row基本上"传播";row中的项跨delta的单独参数

相关内容

  • 没有找到相关文章

最新更新