You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码在含列表的Pandas DataFrame中实现两两Pearson相关分析?

解决Pandas时间序列受试者间两两相关分析的问题

问题原因

你的df2结构不符合corr()的计算要求:Pandas的corr()是计算列与列之间的数值相关性,但你的df2只有一列(728),且每个单元格存储的是列表类型数据,Pandas无法直接对列表进行相关性计算,因此返回空DataFrame。

解决方案:转换DataFrame结构

需要把数据转换成行对应采样点、列对应受试者ID的格式,具体步骤如下:

  1. 提取时间序列并重构DataFrame
    从df2的728列中提取所有受试者的时间序列列表,用pd.DataFrame重新构造后转置,就能得到符合要求的结构:

    # 提取728列的时间序列列表,构造新DataFrame并转置
    new_df = pd.DataFrame(df2['728'].tolist(), index=df2.index).T
    
    • 说明:df2['728'].tolist()会生成一个包含4个列表的列表(每个子列表对应一个受试者的150个采样点);
    • 用pd.DataFrame构造时,默认以受试者ID为索引、每行存储一个受试者的时间序列;
    • 转置(.T)后,行变为150个采样点(索引为0到149),列变为4个受试者ID,此时所有单元格都是数值型数据。
  2. 计算受试者间两两相关性
    现在直接对转换后的new_df调用corr()方法即可:

    pairwise_cor = new_df.corr(method="pearson")
    

    运行后会得到一个4×4的相关系数矩阵,矩阵中的每个值对应两个受试者时间序列的Pearson相关系数。

模拟验证示例

如果你需要测试,可以用以下模拟数据验证流程:

import pandas as pd
import numpy as np

# 模拟df2结构:4个受试者,每个的728列是含150个随机采样点的列表
df2 = pd.DataFrame(
    {'728': [np.random.randn(150) for _ in range(4)]},
    index=['100610', '102311', '104512', '106713']
)

# 转换结构
new_df = pd.DataFrame(df2['728'].tolist(), index=df2.index).T

# 计算两两相关性
pairwise_cor = new_df.corr(method="pearson")
print(pairwise_cor)

内容的提问来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:45:24