【问题标题】:storing output of a for loop that contains multiple columns in a list存储包含列表中多列的 for 循环的输出
【发布时间】:2023-01-28 00:57:47
【问题描述】:

我有以下数据框:

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)

通过下面的代码,我想运行一个具有 6 次迭代的 for 循环并将结果存储在列表中,capita,但我得到了错误KeyError 1。我试过 dictionarydataframe 但其中一个有效:

ls = ([])
for i in [1,6]:
    capita = df.groupby('age') \
            .apply(lambda x: x[['con']].mul(x.weight, 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')
    ls[i]=capita[i]

【问题讨论】:

  • 你从哪里得到KeyError 1,完整的错误信息是什么?
  • 当我添加 ls[i]=capita[i] 时出现该错误。完整的错误只是KeyErorr1
  • 你确定capita[1]有效吗?你不应该使用ls.append()或将ls初始化为[0]*6吗?

标签: python for-loop


【解决方案1】:

您提到的错误是因为您试图访问不存在的列表ls 的索引。

尝试这个:

ls = []
for i in range(6):
    capita = df.groupby('age') 
            .apply(lambda x: x[['con']].mul(x.weight, 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')
    ls.append(capita)

【讨论】:

  • 谢谢骑士
猜你喜欢
  • 2021-10-30
  • 2021-04-23
  • 2020-10-11
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
相关资源
最近更新 更多