corrwith()是否适用于分组后时间序列DataFrame的相关性计算?
使用
corrwith计算分组时间序列相关性的说明 结论:你的场景下可以用,但要注意代码写法和数据对齐问题。
针对你的示例分析
你的df1和df2已经按周完成分组,且每行的date完全匹配,满足时间序列相关性计算的核心前提——数据点严格时间对齐。
但你写的代码df1.corrwith(df2.count)存在错误:df2.count是调用DataFrame的count()方法(用于统计每列的非空值数量),并非取count列,正确写法应为df1.corrwith(df2['count'])。
执行修正后的代码,会计算df1中每一列与df2['count']的皮尔逊相关系数。对于你的数据,df1['count']和df2['count']的相关系数,就能直接反映两个时间序列的线性相关性。
关键注意事项
- 必须保证时间对齐:如果两个DataFrame存在时间点不匹配的情况,
corrwith会自动丢弃不匹配的行,可能导致结果失真。更稳妥的做法是先将date设为索引,确保索引一致:df1 = df1.set_index('date') df2 = df2.set_index('date') # 筛选共同时间点确保对齐 common_dates = df1.index.intersection(df2.index) df1_aligned = df1.loc[common_dates] df2_aligned = df2.loc[common_dates] # 计算相关性 corr = df1_aligned['count'].corr(df2_aligned['count']) - 相关性方法选择:
corrwith默认使用皮尔逊相关系数,适合衡量线性相关关系;若要衡量单调相关趋势,可通过method参数指定'spearman'或'kendall'。 - 单列更高效的写法:如果只需要计算两列的相关性,直接用
df1['count'].corr(df2['count'])更直观,结果是单一的相关系数,无需使用corrwith(它更适合多列批量计算场景)。
内容的提问来源于stack exchange,提问作者teebee99
相关产品推荐
相关产品推荐

