如何更新DataFrame按索引末位分组求和并解决KeyError问题
错误原因
- 内层循环逻辑错误:
for x in df[i]遍历的是列的实际数值,而非行索引,将数值作为索引取值df[i][x]自然触发KeyError - 索引越界风险:即使修改为遍历索引,当索引≥1时,
x+30等取值会超出原df 0-30的索引范围,同样会报错 - 原数据修改问题:直接在原df上赋值修改,会导致后续计算使用已被覆盖的错误值,最终结果不符合预期
解决方法
最优方案(推荐)
直接使用pandas分组聚合能力,按索引末位(索引对10取模)分组求和,一行代码即可完成需求:
new_df = df.groupby(df.index % 10).sum()
该方法无需循环,自动完成同末位索引的行按列求和,最终输出的new_df索引为0-9,完全符合需求。
循环实现版本(如必须使用循环)
提前初始化结果容器,避免修改原数据:
import pandas as pd import numpy as np # 初始化结构和原df匹配的结果表,索引为0-9 new_df = pd.DataFrame(np.zeros((10, df.shape[1])), columns=df.columns) for idx in range(10): # 取出所有末位为idx的行求和赋值 new_df.loc[idx] = df.loc[[idx, idx+10, idx+20, idx+30]].sum()
内容的提问来源于stack exchange,提问作者sgm1354
相关产品推荐
相关产品推荐

