Python numpy“财务irr函数返回”;ValueError:输入必须是秩1数组;

Python numpy“财务irr函数返回”;ValueError:输入必须是秩1数组;,python,numpy,Python,Numpy,我有一个通过mySQL查询填充的数据帧。我把它转换成一个数组来计算irr。排序和groupby函数按预期工作,但我似乎无法避免这个错误。我看了这个,但它似乎不适用于我的情况 我试图传递一个列表、数据帧和熊猫表,但函数正在寻找一个数组,所以这就是我发送它的内容。在此方面的任何帮助都将不胜感激 谢谢 This is the dataset produced as the flows_by_year variable sum EffectiveDate

我有一个通过mySQL查询填充的数据帧。我把它转换成一个数组来计算irr。排序和groupby函数按预期工作,但我似乎无法避免这个错误。我看了这个,但它似乎不适用于我的情况

我试图传递一个列表、数据帧和熊猫表,但函数正在寻找一个数组,所以这就是我发送它的内容。在此方面的任何帮助都将不胜感激

谢谢

This is the dataset produced as the flows_by_year variable
                     sum
EffectiveDate           
2017          -3660000.0
2018          -5520000.0
2019          -2460213.0
2020           1600000.0


import pandas as pd
import sqlite3
from sqlite3 import Error
import numpy_financial as npf

def IRR(fund, pool):
    database = r'C:\Transaction_History.db'
    conn = create_connection(database)
    sql_flows = ('''SELECT EFFECTIVEDATE, TRANSACTIONAMOUNT FROM Trans_Hist WHERE FUND=''' + 
                 '"' + fund + '"' + ' AND POOL=' + '"' + pool + '"' + 
                 ' AND (TRANSACTIONTYPE = "Funding" OR TRANSACTIONTYPE = "Cash");')
    flows = pd.read_sql_query(sql_flows, conn, parse_dates=['EffectiveDate'])
    flows.sort_values(by=['EffectiveDate'], inplace=True, ascending=True)
    flows_by_year = flows.groupby(flows['EffectiveDate'].dt.year)['TransactionAmount'].agg(['sum'])
    print(flows_by_year)
    irr = round(npf.irr(flows_by_year.values), 4) * 100
    irr = f'{irr:,.2f}'
    print(irr)
    return irr
从中,函数
numpy\u financial.irr()
使用类似一维数组的对象。但是,您正在按年份传递
流。值是二维的。使用
np.square(按年流动.值)
按年流动['sum']

演示: [193]中的
:导入熊猫作为pd
…:将numpy_financial作为npf导入
…:将numpy作为np导入
在[194]中:数据=np.asarray([(2017,-3660000.0),
...:                    (2018, -5520000.0),
...:                    (2019, -2460213.0),
...:                    (2020, 1600000.0)])
在[195]中:df=pd.DataFrame(数据,列=['EffectiveDate','sum'])
在[196]中:按年份流动=df.set\u索引('EffectiveDate')
在[197]中:按年值流动
Out[197]:
数组([-3660000.]),
[-5520000.],
[-2460213.],
[ 1600000.]])
在[198]中:np.挤压(按年流量值)
Out[198]:数组([-3660000.,-5520000.,-246013,1600000.)
在[199]中:按年流动[总和]
出[199]:
生效日期
2017.0   -3660000.0
2018.0   -5520000.0
2019.0   -2460213.0
2020.0    1600000.0
名称:sum,数据类型:float64
在[200]中:四舍五入(净现值内部收益率(净现值挤压(流量乘以年值)),4)*100
出[200]:-66.25
在[201]中:四舍五入(净现值、内部收益率(按年度[总和])流动),4)*100
Out[201]:-66.25

这场挤压赛堪称传奇。我肯定会在其他问题上做更多的调查。非常感谢你!!!!