pandas 我收到错误〈运行时警告:sqrt>中遇到无效值

qoefvg9y  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(122)

我想将roll赋值给t_day收益率和t+1_day收益率的月度协方差,如果cov为负:应用2*sqrt(-cov),而不是零。
但是运行我的代码,我得到了这个错误...结果是相当不错的,,,像这样

name1         2013-09-30      0.002193601356164988
              2013-10-31      0.001500876935056412
              2013-11-30     0.0015710504892213046
              2013-12-31                       0.0
              2014-01-31     0.0008342633559122567
                                     ...          
name2         2012-04-30     0.0009217237910999249
              2012-05-31     0.0004212605025293337
              2012-06-30     0.0005957681555937112
              2012-07-31     0.0026365027039003393
              2012-08-31    0.00010877514161905981

如何修复这个错误?或者我应该忽略它?
我的剧本是roll = groupdf.resample('1M').apply(lambda r: np.where(r.cov(r.shift(1))<0, 2*np.sqrt(-(r.cov(r.shift(1)))), 0))

1yjd4xko

1yjd4xko1#

首先计算两列之间的协方差,然后应用负协方差情况的逻辑

roll = groupdf.rolling(window=30).cov(groupdf.shift(1))
roll = roll.apply(lambda x: 2*np.sqrt(-x) if x<0 else 0)

这样,就完成了两列之间滚动协方差的计算,然后对结果应用lambda函数

相关问题