长到宽格式合并

2024-09-27 23:28:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用两个非常大的长格式数据帧,其中一个包含每月(尽管日期不是索引)的CRSP数据,另一个包含每季度(尽管日期不是索引)的COMPUSTAT数据。我正在尝试创建许多宽格式的数据帧,为我将来要处理的每个变量创建一个,大小都相同(最终将是834行乘29001列,因为我不希望每月日期成为索引,而是每个帧的第一列,并且有28999个感兴趣的证券)

我已经按照我想要的方式格式化了这两个长格式的数据帧,并根据WRDS指令为这两种股票创建了我自己的唯一安全标识符(0-28999)。我还预先创建了一些数据帧(例如,PRC表示价格,VOl表示交易量),它们是834 x 29001,第一列是从19490729到20181231的每月日期,其余的列标记为0-28999,以对应每种证券。很明显,我想搜索长格式的dataframes以将所有数据推送到这个标准格式中,但是我在考虑合并时遇到了问题,因为合并是基于第一行中的行而不是第二列中的列

有两件事不管用:

1)我首先尝试简单地循环遍历所有感兴趣的变量(在本例中,首先针对CRSP dataframe),然后循环遍历每一列,根据myIdentifier查找每个安全性存在的日期和有数据的日期,并简单地推送数据,但不是每个安全性都实际存在或有所有变量的数据,因此以下操作失败:

for i in range(0, len(CRSPVariablesOfInterest)):
    for j in range(0, len(uniqueTable)):
        vars()[CRSPVariablesOfInterest[i]].iloc[range(int(np.where(vars()[CRSPVariablesOfInterest[i]].Date == newCRSPMonthly.datadate[newCRSPMonthly.myIdentifier == 10000].min())[0]), int(np.where(vars()[CRSPVariablesOfInterest[i]].Date == newCRSPMonthly.datadate[newCRSPMonthly.myIdentifier == 10000].max())[0]) + 1), 10000 + 1] = newCRSPMonthly[CRSPVariablesOfInterest[i]][newCRSPMonthly.myIdentifier == 10000]

2)然后我尝试了一些更简单的方法,只是尝试从长格式转换为宽格式,但收到了一个错误“索引包含重复的条目,无法重塑。”

test = newCRSPMonthly.pivot(index = "datadate", columns = "myIdentifier", values = "PRC")

希望一切都有意义,抱歉这是我第一次问问题。我期待着你能提供的任何帮助


Tags: 数据inforlen格式rangevars感兴趣

热门问题