我正在处理自1993年以来巴西指数(IBOV)的每日回报,我试图找出两个日期之间的子集的最佳方法.
数据框(IBOV_RET)如下:
head(IBOV_RET)
DATE 1D_RETURN
1 1993-04-28 -0.008163265
2 1993-04-29 -0.024691358
3 1993-04-30 0.016877637
4 1993-05-03 0.000000000
5 1993-05-04 0.033195021
6 1993-05-05 -0.012048193
...
Run Code Online (Sandbox Code Playgroud)
我设置了2个变量DATE1和DATE2日期
DATE1 <- as.Date("2014-04-01")
DATE2 <- as.Date("2014-05-05")
Run Code Online (Sandbox Code Playgroud)
我能够使用以下代码创建一个新的子集:
TEST <- IBOV_RET[IBOV_RET$DATE >= DATE1 & IBOV_RET$DATE <= DATE2,]
Run Code Online (Sandbox Code Playgroud)
它工作,但我想知道是否有更好的方法来分配2日期之间的数据,也许使用subset.
在下面的3维数组中:
ar <- array(someData, c(5, 5, 5));
rownames(ar) <- ...; #to set up row names
colnames(ar) <- ...; #to set up col names
Run Code Online (Sandbox Code Playgroud)
如何设置第三维名称?
我有一个包含过去 10 年每日股票数据的数据框,这是数据框的一部分:
ITUB4 ITUB3
DATE
2007-04-26 13.46 11.12
2007-04-27 13.49 11.00
2007-04-30 13.19 10.92
2007-05-02 13.57 11.09
2007-05-03 13.90 11.25
... ... ...
2017-12-21 42.72 37.39
2017-12-22 42.52 36.99
2017-12-26 42.69 37.44
2017-12-27 42.46 37.46
2017-12-28 42.57 37.68
2641 rows × 2 columns
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来每年切片这个数据帧?我知道可以通过使用来做到这一点:
df['20061230':'20071231']
Run Code Online (Sandbox Code Playgroud)
我想知道是否有类似的东西:
df.index.year['2017']
Run Code Online (Sandbox Code Playgroud) 我想要做的是使用 statsmodels.api 对数据框的所有可能的成对列组合应用线性回归。
我能够为以下代码做到这一点:
对于数据框df:
import statsmodels.api as sm
import numpy as np
import pandas as pd
#generate example Dataframe
df = pd.DataFrame(abs(np.random.randn(50, 4)*10), columns=list('ABCD'))
#extract all possible combinations of columns by column index number
i, j = np.tril_indices(df.shape[1], -1)
#generate a for loop that creates the variable an run the regression on each pairwise combination
for idx,item in enumerate(list(zip(i, j))):
exec("model" + str(idx) +" = sm.OLS(df.iloc[:,"+str(item[0])+"],df.iloc[:,"+str(item[1])+"])")
exec("regre_result" + str(idx) +" = model" + str(idx)+".fit()")
regre_result0.summary() …Run Code Online (Sandbox Code Playgroud) Bellow是股票日收益矩阵示例(ret_matriz)
IBOV PETR4 VALE5 ITUB4 BBDC4 PETR3
[1,] -0.040630825 -0.027795652 -0.052643733 -0.053488685 -0.048455772 -0.061668282
[2,] -0.030463489 -0.031010237 -0.047439725 -0.040229625 -0.030552275 -0.010409016
[3,] -0.022668170 -0.027012078 -0.022668170 -0.050372843 -0.080732363 0.005218051
[4,] -0.057468428 -0.074922051 -0.068414670 -0.044130126 -0.069032911 -0.057468428
[5,] 0.011897277 -0.004705891 0.035489885 -0.005934736 -0.006024115 -0.055017693
[6,] 0.020190656 0.038339130 0.009715552 0.014771317 0.023881732 0.011714308
[7,] -0.007047191 0.004529286 0.004135085 0.017442303 -0.005917177 -0.007047191
[8,] -0.022650593 -0.029481336 -0.019445057 -0.017442303 -0.011940440 -0.046076458
[9,] 0.033137223 0.035274722 0.038519205 0.060452104 0.017857617 0.046076458
Run Code Online (Sandbox Code Playgroud)
例如,考虑一个5天的移动窗口,我想要一个新的矩阵,如下所述:
IBOV PETR4 ...
[1,] 0 0 ... …Run Code Online (Sandbox Code Playgroud)