如何用Python循环计算重复ID对应的数值平均值
解决重复ID的数值平均值计算问题
你的原代码存在几个明显问题:
- 循环里的
ID[i+1]会在最后一条记录时触发索引越界错误,因为最后一个元素没有下一个元素 - 嵌套循环逻辑完全没处理数值的累加和计数,只是在找重复位置,根本没法计算平均值
- 嵌套循环时间复杂度是O(n²),60万条数据跑起来会慢到离谱
直接给你两种高效的解决方案:
方案一:纯Python字典统计(无需第三方库)
用字典存储每个ID的数值总和和出现次数,只需要遍历一次数据,时间复杂度O(n),处理60万条数据毫无压力:
# 假设ID和Value是两个对应列表,比如: # ID = ['a','a','b','b','b','c'] # Value = [1,3,3,4,5,1] id_stats = {} # 遍历所有记录,累加总和与计数 for id_, val in zip(ID, Value): if id_ in id_stats: id_stats[id_][0] += val id_stats[id_][1] += 1 else: # 首次遇到该ID,初始化总和为当前值,计数为1 id_stats[id_] = [val, 1] # 计算并输出每个ID的平均值 for id_, (total, count) in id_stats.items(): average = total / count print(f"Average {id_} = {average}")
方案二:用Pandas处理(大数据首选)
Pandas专门针对这类分组统计做了极致优化,代码更简洁,处理60万条数据的速度比手动循环快几个量级:
import pandas as pd # 把数据放进DataFrame,也可以直接从CSV/Excel读取:df = pd.read_csv('你的数据文件.csv') df = pd.DataFrame({ 'ID': ['a','a','b','b','b','c'], 'Value': [1,3,3,4,5,1] }) # 按ID分组,直接计算平均值 average_result = df.groupby('ID')['Value'].mean() # 输出结果 for id_, avg in average_result.items(): print(f"Average {id_} = {avg}")
两种方案都能得到你要的结果:
Average a = 2,Average b = 4,Average c = 1
内容的提问来源于stack exchange,提问作者SatisG
相关产品推荐
相关产品推荐

