我有一个以Pandas DataFrame格式操作的函数。它适用于pandas.apply(),但不适用于np.Vectorize()。请查找以下功能:
def AMTTL(inputData, amortization = []):
rate = inputData['EIR']
payment = inputData['INSTALMENT']
amount = inputData['OUTSTANDING']
amortization = [amount]
if amount - payment <= 0:
return amortization
else:
while amount > 0:
amount = BALTL(rate, payment, amount)
if amount <= 0:
continue
amortization.append(amount)
return amortization该函数以Pandas DataFrame格式接收DataFrame。EIR、INSTALMENT和OUTSTANDING是列名。此函数与pandas.apply()很好地工作。
data.apply(AMTTL, axis = 1)然而,我尝试使用np.Vectorize()。它不适用于下面的代码:
vfunc = np.vectorize(AMTTL)
vfunc(data)它的错误就像'Timestamp' object is not subscriptable一样。因此,我尝试删除其他未使用的列,但它仍然得到了另一个错误,如invalid index to scalar variable.。
我不知道如何将pandas.apply()调整为np.Vectorize()。有什么建议吗?提前谢谢你。
发布于 2022-09-21 13:06:43
np.vectorize只不过是一个应用于数组中所有元素的map函数--这意味着您无法区分函数中的列。它不知道像EIR或INSTALMENT这样的列名。因此,您当前对numpy的实现将无法工作。
来自文档
矢量化函数在输入数组的连续元组(如python映射函数)上计算pyfunc,但它使用numpy的广播规则。 矢量化函数的提供主要是为了方便,而不是为了性能。实现本质上是一个for循环。
基于您的问题,您应该尝试使用 np.apply_along_axis ,在这里您可以引用不同的列及其索引.
https://stackoverflow.com/questions/73795766
复制相似问题