Pandas如何从指定索引开始将后续多行求和合并为单行
Pandas指定行求和替换原多行实现方案
需求说明
针对11行的DataFrame,保留前3行内容,将第4行至第11行的数值列求和生成1行新数据,替换原有的4-11行,最终得到4行的结构化结果。
原有代码问题
你之前的拆分拼接思路逻辑是可行的,未达到预期有两个核心原因:
- 未提前生成4-11行的求和结果行,拼接时缺失核心汇总数据
- 未注意Pandas默认位置索引是0开始计数:日常从1开始数的第4行,对应
iloc位置索引为3,第4-11行对应位置索引范围是3~10,原代码删除的索引范围和实际目标行不匹配
可直接运行的实现代码
注意:以下代码默认行号从1开始计数,和你描述的第4-11行对齐,使用iloc按行位置操作,不会受自定义行索引影响
方法1:沿用拆分拼接思路的修正版
import pandas as pd # 提取前3行(对应1计数的1-3行) keep_part = pivot_rank_famille.iloc[:3].copy() # 计算4-11行的数值列求和,转换为单行DataFrame格式 sum_part = pivot_rank_famille.iloc[3:11].sum(numeric_only=True).to_frame().T # 如需给汇总行设置名称,可取消下一行注释修改 # sum_part.index = ["合计"] # 拼接两部分得到最终结果 pivot_rank_famille_regroup = pd.concat([keep_part, sum_part], axis=0)
方法2:直接修改删行的简洁写法
# 将求和结果直接赋值到第4行的位置 pivot_rank_famille.iloc[3] = pivot_rank_famille.iloc[3:11].sum(numeric_only=True) # 删除原第5-11行,重置索引得到最终结果 pivot_rank_famille_regroup = pivot_rank_famille.drop(index=range(4, 11), axis=0).reset_index(drop=True)
注意事项
操作时优先使用
iloc按行位置切片选取数据,不要直接用索引值删行,避免自定义索引值和行实际位置不匹配导致删错、算错数据。
内容的提问来源于stack exchange,提问作者madPatatoO
相关产品推荐
相关产品推荐

