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

如何在DataFrame中计算两列相关系数并添加为新列(含分组场景)

解决DataFrame中添加相关系数列的两类需求

问题1:为整个DataFrame的两列添加全局相关系数作为新列

如果你需要的是整个DataFrame中两列的全局相关系数(也就是一个单一值,广播到每一行),直接计算后赋值即可,pandas会自动把标量值扩展到整个列:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [2, 4, 5, 7, 9]
})

# 计算A和B的相关系数,作为新列添加
df['Corr_Coeff'] = df['A'].corr(df['B'])

这样Corr_Coeff列的每一行都会是A、B两列整体的相关系数值。


问题2:按ID分组计算每组的A、B相关系数,并映射回原DataFrame

针对你给出的分组需求,核心是先按ID计算每组的相关系数,再把这个值关联到原DataFrame的每一行。这里有两种简洁的实现方式:

方法1:先分组计算,再用map关联

import pandas as pd

# 你的原始DataFrame
data = {
    'ID': [1, 1, 2, 2, 2],
    'A': [5, 3, 4, 7, 9],
    'B': [7, 4, 5, 6, 1]
}
df = pd.DataFrame(data)

# 第一步:按ID分组,计算每组A和B的相关系数
corr_per_id = df.groupby('ID').apply(lambda group: group['A'].corr(group['B']))

# 第二步:用map把每个ID对应的相关系数映射回原DataFrame
df['Corr_Coeff'] = df['ID'].map(corr_per_id)

方法2:用transform一步到位

transform方法会自动将分组计算的结果扩展为与原DataFrame行数一致的格式,直接赋值即可:

df['Corr_Coeff'] = df.groupby('ID')[['A', 'B']].transform(lambda x: x['A'].corr(x['B']))

运行后你会得到期望的结果:

ID  A  B  Corr_Coeff
0   1  5  7    0.999999
1   1  3  4    0.999999
2   2  4  5   -0.970725
3   2  7  6   -0.970725
4   2  9  1   -0.970725

简单解释下:两种方法都是先计算每个ID组内A和B的相关系数,再把这个值匹配到该ID的所有行上,区别只是实现方式的简洁度不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:15