尝试从另一个具有特定限制的数据帧创建数据帧

时间:2019-03-13 12:24:36

标签: python pandas dataframe

我正在尝试用Python编写VAR模型(​​不允许在statsmodel中使用预制函数,例如VAR)。

为此,我需要因变量的矩阵。 我有一个3个政府债券的数据集,它们都具有不同的期限。 数据导入并按如下处理

# importing file
df = pd.read_csv("C://Users/raymond/Desktop/Econometrie3/us_tbills_8019.csv")

# dropping years > 1999
df = df.iloc[:240]

# calculating log differences
Dates = pd.to_datetime(df['DATE'], format='%Y-%m-%d')
mData = df[['GS10','GS5','GS1']]
mData.index = pd.DatetimeIndex(Dates)
AllData = mData
logdif = np.log(mData).diff().shift(1).dropna()

要创建矩阵Y(它是因变量的矩阵),我想取 logdif 的值,范围为i = 1:K和j = P + 1:T-1

我尝试了以下步骤来创建矩阵:

# variables
K = 3
T = df.shape[0]
P = 4

# matrix of Dependent Variable
Y = logdif
def functionY():
    for i in range(1, 3, 1):
        for j in range(P+1, T-1, 1):
            Y[i][j-1] = logdif[i][j]
        return Y

我也尝试了其他方法来找到矩阵,但没有任何效果。
有关创建矩阵的任何提示吗?

1 个答案:

答案 0 :(得分:0)

我无法理解您的所有代码(因此可能还有其他问题),但是我注意到您正在将数据帧logdif分配给第二个变量Y,然后将值写入{{ 1}}。您应该知道,这会修改Y,因为它仅是通过引用分配的。 (这看起来并不理想,因为您正在同时从logdif中读取。)

使用logdif可以避免这种情况。

编辑:而且,Y = logdif.copy()range(1,3,1)相同。

编辑:另外,您提到您正在尝试创建矩阵;您现在使用的变量仍然是DataFrame(np.log在此处保留参数的类型)。您可以使用range(1,3)进行更改。