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

如何存储for循环多列结果到列表?KeyError 1问题求助

解决KeyError及循环结果存储问题

原始DataFrame

import pandas as pd
import numpy as np

data = {'id':[1,1,2,2,2,3,3,3],
        'var':[10,12,8,11,13,14,15,16],
        'ave':[2,2,1,4,3,5,6,8],
        'age': [10,10,13,13,20,20,20,11],
        'weight':[2.5,1.1,2.1,2.2,3.5,3.5,4.2,1.3],
        'con': [3.1,2.3,4.5,5.5,6.5,7.5,4.7,7.1]}

df = pd.DataFrame(data)

错误原因分析

  1. 循环范围错误:for i in [1,6]仅会循环2次(i=1和6),无法实现6次循环的需求。
  2. 列表赋值错误:空列表ls初始无任何索引位置,直接用ls[i] = capita[i]会触发索引错误;且capita是DataFrame,不能直接用整数索引取值。
  3. 计算逻辑笔误:mul(x.weight, 0)是将con乘以0,导致结果全为0,应为axis=0(按行将con与weight相乘)。

修正后的代码

用列表存储结果

ls = []
# 执行6次循环
for _ in range(6):
    # 计算age分组的加权平均,修正axis参数
    capita = df.groupby('age') \
               .apply(lambda x: x[['con']].mul(x.weight, axis=0).sum() / x.weight.sum()) \
               .reset_index() \
               .rename(columns={"con":"ave"})
    # 更新df['ave']为age分组的加权平均
    df["ave"] = df["age"].map(df.groupby('age').apply(lambda x: np.average(x['con'], weights=x['weight'])))
    # 更新df['con']字段
    df['con'] = df['var'] * df['ave'] / df.groupby('id')['ave'].transform('sum')
    # 将本次循环的capita添加到列表
    ls.append(capita)

# 查看第1次循环的结果
print(ls[0])

用字典存储结果(可选)

若需要通过循环索引快速定位结果,可改用字典:

capita_dict = {}
for i in range(6):
    capita = df.groupby('age') \
               .apply(lambda x: x[['con']].mul(x.weight, axis=0).sum() / x.weight.sum()) \
               .reset_index() \
               .rename(columns={"con":"ave"})
    df["ave"] = df["age"].map(df.groupby('age').apply(lambda x: np.average(x['con'], weights=x['weight'])))
    df['con'] = df['var'] * df['ave'] / df.groupby('id')['ave'].transform('sum')
    capita_dict[i] = capita

# 查看第3次循环的结果(索引从0开始)
print(capita_dict[2])

关键修正点

  • 用range(6)实现6次循环,_作为占位符表示无需使用循环变量。
  • 用append()方法向列表添加元素,避免索引错误。
  • 修正mul的axis=0参数,确保加权和计算正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:05:31