【发布时间】: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。我试过 dictionary 和 dataframe 但其中一个有效:
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吗?