首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Pandas函数中使用np.Vectorize()?

如何在Pandas函数中使用np.Vectorize()?
EN

Stack Overflow用户
提问于 2022-09-21 05:30:43
回答 1查看 92关注 0票数 0

我有一个以Pandas DataFrame格式操作的函数。它适用于pandas.apply(),但不适用于np.Vectorize()。请查找以下功能:

代码语言:javascript
复制
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。EIRINSTALMENTOUTSTANDING是列名。此函数与pandas.apply()很好地工作。

代码语言:javascript
复制
data.apply(AMTTL, axis = 1)

然而,我尝试使用np.Vectorize()。它不适用于下面的代码:

代码语言:javascript
复制
vfunc = np.vectorize(AMTTL)
vfunc(data)

它的错误就像'Timestamp' object is not subscriptable一样。因此,我尝试删除其他未使用的列,但它仍然得到了另一个错误,如invalid index to scalar variable.

我不知道如何将pandas.apply()调整为np.Vectorize()。有什么建议吗?提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2022-09-21 13:06:43

np.vectorize只不过是一个应用于数组中所有元素的map函数--这意味着您无法区分函数中的列。它不知道像EIRINSTALMENT这样的列名。因此,您当前对numpy的实现将无法工作。

来自文档

矢量化函数在输入数组的连续元组(如python映射函数)上计算pyfunc,但它使用numpy的广播规则。 矢量化函数的提供主要是为了方便,而不是为了性能。实现本质上是一个for循环。

基于您的问题,您应该尝试使用 np.apply_along_axis ,在这里您可以引用不同的列及其索引.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73795766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档