You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何按周计算Pandas DataFrame中两列的Pearson与Spearman相关性?

如何按周计算Pandas DataFrame中两列的Pearson与Spearman相关性?

你的思路完全靠谱!用resample结合corr确实是实现按周计算相关性的高效方案,我来给你拆解具体操作,还会教你怎么一次性得到两种相关性结果。

首先先确认你的数据构建逻辑没问题,2018年1月1日到28日正好是4个完整周,完美适配按周分组的需求。

方法1:单独计算单一相关性(比如你提到的Spearman)

你写的df.resample('W').corr(method='spearman')是完全可行的,不过运行后会得到一个层次化索引的相关矩阵(每个周对应A-A、A-B、B-A、B-B四个值),如果只想提取A和B之间的相关系数,可以用xs来筛选:

# 计算每周Spearman相关性并提取A-B的系数
weekly_spearman = df.resample('W').corr(method='spearman').xs('A', level=1)['B']
print(weekly_spearman)

默认'W'是把周日作为每周的结束日,如果你想调整周的结束时间(比如周一),可以改成'W-MON';要是想用每周的起始日作为结果的索引标签,加上label='left'参数即可,比如df.resample('W', label='left').corr(...)

方法2:同时计算Pearson和Spearman两种相关性

如果想一次性得到两种方法的结果,我们可以自定义一个函数,然后用resampleapply方法批量处理每个周的分组:

def calculate_correlations(group):
    # 计算当前周的Pearson相关系数(A与B)
    pearson_corr = group.corr(method='pearson').loc['A', 'B']
    # 计算当前周的Spearman相关系数(A与B)
    spearman_corr = group.corr(method='spearman').loc['A', 'B']
    # 返回包含两种结果的Series
    return pd.Series({'Pearson': pearson_corr, 'Spearman': spearman_corr})

# 按周重采样并应用自定义函数
weekly_corrs = df.resample('W').apply(calculate_correlations)
print(weekly_corrs)

这样得到的weekly_corrs是一个结构清晰的DataFrame,每一行对应一个周,两列分别是Pearson和Spearman的相关系数,非常直观。

注意事项

  • 如果你的数据中有缺失日期或者某周的样本量不足2个,计算相关性时会返回NaN,可以根据需求用dropna()或者填充值处理。
  • 周的时间标签可以通过labelloffset参数灵活调整,比如label='left'用周起始日作为索引,loffset='-1d'可以把结束日调整为周六。

备注:内容来源于stack exchange,提问作者diedro

火山引擎 最新活动