如何在Pandas中为多时间序列生成相关矩阵?
解决方案
你的数据是长格式(long format),要计算各item时间序列的相关矩阵,第一步需要把数据重塑为宽格式:每个item作为一列,timestamp作为索引,对应的值填充到单元格中。因为你的数据没有缺失值,这一步可以直接用pivot完成。
然后对宽格式的DataFrame调用corr()方法,就能直接生成所有item两两之间的相关矩阵。
具体代码实现
# 将长格式DataFrame转为宽格式 df_wide = dfso.pivot(columns='item', values='value') # 计算相关矩阵 corr_matrix = df_wide.corr()
代码说明
pivot(columns='item', values='value'):把item列的每个唯一值转成新列,value列的对应值填充到新列的对应行(按timestamp索引匹配)。由于你的数据每个timestamp-item组合都有唯一值,不会出现冲突或缺失。corr():默认采用皮尔逊相关系数计算列与列之间的相关性,直接生成一个N×N的矩阵(N为item总数,这里是700)。矩阵的行和列均为item编号,单元格值就是对应两个item时间序列的相关系数。
报错原因分析
你遇到的TypeError: unsupported operand type(s) for /: 'list' and 'int',大概率是错误地对groupby('item')的结果直接调用相关性计算方法。分组后的对象是多个独立Series的集合,并非适合计算交叉相关性的结构,必须先转成宽格式,让所有时间序列处于同一DataFrame的列中,才能批量计算相关性。
内容的提问来源于stack exchange,提问作者user207453
相关产品推荐
相关产品推荐

