【问题标题】:How to calculate XIRR for each investment using python如何使用 python 计算每项投资的 XIRR
【发布时间】:2022-01-05 13:12:18
【问题描述】:

我正在尝试应用 XIRR 公式,以便单独计算每项投资的百分比。

我在 excel 文件中有数据,例如:

https://i.stack.imgur.com/yqMiV.png

标题:脚本、日期、值

结果:脚本和 XIRR

使用的 Python 库:

#pip install pyxirr

从 pyxirr 导入 xirr

我正在计算如下的单个脚本代码并将其附加到数据框:

S1= df[["Date","Value"]][df["Script"]=="S1"]
S1= S1[["Date","Value"]]
S1_1= round(xirr(S1),2)*100
S1_1= pd.DataFrame({"Script": "S1","XIRR": S1_1},index=[1])
XIRR = XIRR.append(S1_1, ignore_index=True)

如何应用函数/循环在一个地方计算不同的脚本并创建结果的新数据框(图片已附上)。

【问题讨论】:

    标签: python function lambda statistics finance


    【解决方案1】:

    您可以按 DataFrame 分组 Script 并将 xirr 函数应用于每个组:

    from io import StringIO
    import pandas as pd
    from pyxirr import xirr
    
    # some data for reproducibility:
    csv_content = """
    Script,Date,Value,Comment
    S1,10/20/2019,-2000,Invested
    S1,11/19/2019,-1800,Invested
    S1,12/19/2019,-1600,Invested
    S1,11/29/2021,9000,Current Value
    S2,9/25/2019,-2000,Invested
    S2,10/25/2019,-1800,Invested
    S2,11/24/2019,-1600,Invested
    S2,11/28/2021,9000,Current Value
    """
    df = pd.read_csv(StringIO(csv_content), parse_dates=["Date"])
    
    # the code you actually need
    # [["Date", "Value"]] selects only columns required for xirr
    result = df.groupby("Script")[["Date", "Value"]].apply(xirr)
    print(result)
    

    结果是

    Script
    S1    0.285053
    S2    0.275016
    dtype: float64
    

    【讨论】:

    • 非常感谢您的回复 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-07-16
    • 1970-01-01
    • 2014-01-25
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多