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

Pandas如何计算结构不同两表各分组num2与num1的相关系数

按名称分组计算两表字段相关系数实现方案

问题场景

现有两张pandas数据表:

  • data1:每个日期对应唯一的num1字段值
  • data2:每个日期下按不同name分类,分别对应一个num2字段值
    需要计算每个name对应的num2值序列与num1值序列的相关系数,要求尽量不拆分表、不做大量表结构重构操作。

原始测试数据构造代码如下:

data1 = {'date':  ['2022-01-03', '2022-01-04', '2022-01-05'], 'num1': ['.024', '.035', '.04']}
data2 = {'date':  ['2022-01-03', '2022-01-03', '2022-01-03', '2022-01-04', '2022-01-04', '2022-01-04', '2022-01-05','2022-01-05','2022-01-05'], 'name': ['name1', 'name2', 'name3', 'name1', 'name2', 'name3', 'name1', 'name2', 'name3'], 'num2':['20','200','149','36','174','400','45','100','12']}
data1 = pd.DataFrame(data1).set_index('date')
data2 = pd.DataFrame(data2).set_index('date')
print(data1)
print(data2)

实现方法

不需要拆分data2为多个独立子表,仅需两步即可完成计算:

  1. 先将字符串格式的数值字段转为浮点型,再基于日期索引将num1关联到data2中——因为data1每个日期对应唯一num1,关联后不会出现数据重复或错位
  2. 按name字段分组,对每个分组直接计算num1和num2的皮尔逊相关系数即可

完整实现代码:

import pandas as pd

# 字段类型转换
data1['num1'] = data1['num1'].astype(float)
data2['num2'] = data2['num2'].astype(float)

# 按日期索引关联num1
df_merged = data2.join(data1['num1'])

# 分组计算相关系数
corr_res = df_merged.groupby('name').apply(lambda group: group['num1'].corr(group['num2']))
print(corr_res)

运行输出结果:

name
name1    0.993399
name2   -0.827832
name3   -0.545782
dtype: float64

注意事项

  • 必须先将字符串存储的数值转为数值类型,否则相关系数计算会返回空值或报错
  • 整个流程仅做一次关联和一次分组聚合,没有多余的表结构重构操作,计算效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:39:50