You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pyxirr库中按ID分组计算XIRR?解决InvalidPaymentsError

解决分组计算XIRR时的InvalidPaymentsError问题

错误翻译

InvalidPaymentsError: 必须同时包含支出(负值)和收入(正值)的支付记录

问题原因

XIRR的计算逻辑要求每组数据里必须同时存在正负支付记录(比如既有投入资金,也有收回资金),你的数据中部分ID对应的payment列全为正值或全为负值,导致无法完成XIRR计算。

解决方案

方案1:先过滤无效分组

先筛选出同时包含正负支付记录的ID,再针对这些有效分组计算XIRR:

import pandas as pd
from pyxirr import xirr

# 筛选出同时存在正负payment的ID
valid_ids = df.groupby("ID")["payment"].apply(lambda x: (x < 0).any() and (x > 0).any())
valid_df = df[df["ID"].isin(valid_ids[valid_ids].index)]

# 计算有效分组的XIRR
result = valid_df.groupby("ID")[['date','payment']].apply(xirr)

方案2:添加错误处理跳过无效分组

通过try-except捕获错误,对无法计算的分组返回标记值(比如pd.NA):

import pandas as pd
from pyxirr import xirr, InvalidPaymentsError

def calculate_xirr(group):
    try:
        return xirr(group)
    except InvalidPaymentsError:
        return pd.NA  # 用NA标记无法计算的分组

result = df.groupby("ID")[['date','payment']].apply(calculate_xirr)

内容的提问来源于stack exchange,提问作者Ajit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:45:28