小编Dji*_*ggy的帖子

如何更有效地计算滚动协方差

我试图在R中计算一组数据(我的x变量的每一列)和另一个(y变量)之间的滚动协方差.我想我可以使用其中一个应用函数,但是找不到如何滚动两个同时设置输入.这是我尝试过的:

 set.seed(1)
 x<-matrix(rnorm(500),nrow=100,ncol=5)
 y<-rnorm(100)
 rollapply(x,width=5,FUN= function(x) {cov(x,y)})
 z<-cbind(x,y)
 rollapply(z,width=5, FUN=function(x){cov(z,z[,6])})
Run Code Online (Sandbox Code Playgroud)

但没有人做我想做的事.我找到的一个解决方案是使用for循环,但想知道我是否可以在R中更高效:

dResult<-matrix(nrow=96,ncol=5)
for(iLine in 1:96){
    for(iCol in 1:5){
        dResult[iLine,iCol]=cov(x[iLine:(iLine+4),iCol],y[iLine:(iLine+4)])
    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我预期的结果:

head(dResult)


           [,1]       [,2]        [,3]        [,4]        [,5]
[1,]  0.32056460 0.05281386 -1.13283586 -0.01741274 -0.01464430
[2,] -0.03246014 0.78631603 -0.34309778  0.29919297 -0.22243572
[3,] -0.16239479 0.56372428 -0.27476604  0.39007645  0.05461355
[4,] -0.56764687 0.09847672  0.11204244  0.78044096 -0.01980684
[5,] -0.43081539 0.01904417  0.01282632  0.35550327  0.31062580
[6,] -0.28890607 0.03967327  0.58307743  0.15055881  0.60704533
Run Code Online (Sandbox Code Playgroud)

r covariance rollapply

11
推荐指数
2
解决办法
1347
查看次数

在 Pandas 数据框中添加列时出现 NaT 错误

我正在尝试在 python 中创建一个日期数据框。我使用日期作为索引:

aDates.head(5)
Out[114]: 
0   2009-12-31
1   2010-01-01
2   2010-01-04
3   2010-01-05
4   2010-01-06
Name: Date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

然后我创建一个空的数据框:

dfAll_dates = pd.DataFrame(index = aDates)
Run Code Online (Sandbox Code Playgroud)

然后我得到了一个函数,它创建了一个我试图添加为列的 Pandas 系列日期,但为了您可以轻松重现,假设我们添加了用于索引的相同系列:

dfAll_dates['my_added_column'] = aDates
Run Code Online (Sandbox Code Playgroud)

但这导致:

dfAll_dates.head(5)

Out[120]: 
           my_added_column
Date                      
2009-12-31             NaT
2010-01-01             NaT
2010-01-04             NaT
2010-01-05             NaT
2010-01-06             NaT
Run Code Online (Sandbox Code Playgroud)

我试图在 aDates 上使用 .totimestamp 将我的日期转换为时间戳,但这并没有解决问题(然后我有一个“绑定方法 Series.to_timestamp 为 0”),并且因为定义中没有类型我看不到为什么我无论如何都必须转换。

你能帮忙吗?

python dataframe pandas

4
推荐指数
1
解决办法
2127
查看次数

在pandas数据帧上使用apply时传递的值的形状错误

我试图在给定数据帧的所有行(dfTest,其中包含向量x的值)上应用基本样条函数,以获得更大的一个(dfBigger),它将包含向量xnew(包含x)的所有值.

因此,我定义了以下变量:

import pandas as pd
import numpy as np

x = [0,1,3,5]
xnew = range(0,6)

np.random.seed(123)
dfTest = pd.DataFrame(np.random.rand(12).reshape(3,4))
Run Code Online (Sandbox Code Playgroud)

和基本样条函数:

def spline(y, x , xnew):
    from scipy import interpolate
    model = interpolate.splrep(x,y, s=0.)
    ynew = interpolate.splev(xnew,model)
    result = ynew.round(3)
    return result
Run Code Online (Sandbox Code Playgroud)

这似乎工作:

spline(dfTest.iloc[0],x,xnew)
Out[176]: array([ 0.696,  0.286,  0.161,  0.227,  0.388,  0.551])
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用以下方法在所有行上应用它时:

dfBigger = dfTest.apply(lambda row : spline(row, x, xnew), axis = 1)
Run Code Online (Sandbox Code Playgroud)

我懂了 :

ValueError: Shape of passed values is (3, 6), indices imply (3, 4)
Run Code Online (Sandbox Code Playgroud)

由于dfBigger大小没有在任何地方定义,我看不出有什么问题.任何有关此代码的帮助和/或评论将不胜感激.

python apply dataframe pandas

1
推荐指数
1
解决办法
1034
查看次数

标签 统计

dataframe ×2

pandas ×2

python ×2

apply ×1

covariance ×1

r ×1

rollapply ×1