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

如何遍历CSV文件中的指定id并为每个id计算pearson系数

问题解决方法

原有代码错误点

  • 列名不匹配:CSV中id列名称为ids,你代码中调用的是df['id'],会触发键不存在报错
  • 未按id筛选数据:循环中每次都使用全量数据集计算皮尔逊系数,结果全部为全量数据的计算值,完全不符合按id分组计算的需求
  • 循环范围逻辑错误:range为左闭右开区间,会丢失最大id的计算,且如果id不是连续整数时会出现大量无效计算,是运行耗时极长的核心原因
  • 计算结果未关联对应id:最终输出的结果列表无法和id对应,没有实用价值

最优实现方案(pandas分组计算,效率远高于自行写循环)

直接用pandas原生的groupby做分组计算,底层做了矢量运算优化,大数据量下也不会卡顿:

import pandas as pd
import scipy.stats as stats

path = 'C:/path/'
df = pd.read_csv(path + 'mycsvfile.csv')

# 定义单组皮尔逊系数计算函数
def calc_pearson(group):
    corr, pvalue = stats.pearsonr(group['year'], group['mean'])
    return pd.Series([corr, pvalue], index=['pearson_corr', 'p_value'])

# 按id分组计算,结果自动关联对应id
res_df = df.groupby('ids', as_index=True).apply(calc_pearson).reset_index()

# 如果你需要单独的皮尔逊系数列表,直接取对应列转换即可
corr_list = res_df['pearson_corr'].tolist()

循环写法修正版(仅保留循环逻辑的情况使用)

import pandas as pd
import scipy.stats as stats

path = 'C:/path/'
df = pd.read_csv(path + 'mycsvfile.csv')

res = []
# 取所有唯一id,避免id不连续导致的无效计算
unique_ids = df['ids'].unique()
for id_val in unique_ids:
    # 筛选当前id对应的子数据集
    sub_df = df[df['ids'] == id_val]
    corr, pvalue = stats.pearsonr(sub_df['year'], sub_df['mean'])
    res.append({'id': id_val, 'pearson_corr': corr, 'p_value': pvalue})

res_df = pd.DataFrame(res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:24:03