如何在Pandas DataFrame中对BB行指定列求和并添加新行?
Pandas:针对指定行的列分组求和并新增行
需求说明
在Pandas DataFrame中完成以下操作:
- 定位ID为
BB的行 - 对该行的
Q121、Q221列数值求和,结果放入新增行NEW的Q121列,Q221列填0 - 对该行的
Q321、Q421列数值求和,结果放入新增行NEW的Q321列,Q421列填0 - 新增行的ID列为
NEW
原始数据
ID Q121 Q221 Q321 Q421 AA 8.0 4.8 3.1 5.3 BB 0.6 0.7 0.3 0.9
期望结果
ID Q121 Q221 Q321 Q421 AA 8.0 4.8 3.1 5.3 BB 0.6 0.7 0.3 0.9 NEW 1.3 0.0 1.2 0.0
当前尝试代码
mask = df['ID'].eq('BB') df[NEW] = df.iloc[2,1:2].sum()
当前代码存在的问题:
- 依赖固定行索引
iloc[2]定位BB行,若数据行顺序变化会出错 - 切片
1:2仅取了Q121列,未覆盖Q221列的求和 - 逻辑未实现后两列的求和及新增整行的需求
优化解决方案
方案1:鲁棒性优先写法
import pandas as pd # 构造原始DataFrame(已有数据可跳过此步骤) data = { 'ID': ['AA', 'BB'], 'Q121': [8.0, 0.6], 'Q221': [4.8, 0.7], 'Q321': [3.1, 0.3], 'Q421': [5.3, 0.9] } df = pd.DataFrame(data) # 精准定位BB行数据 bb_row = df[df['ID'] == 'BB'].iloc[0] # 计算分组求和值 sum_q1q2 = bb_row[['Q121', 'Q221']].sum() sum_q3q4 = bb_row[['Q321', 'Q421']].sum() # 构造新增行 new_row = pd.Series({ 'ID': 'NEW', 'Q121': sum_q1q2, 'Q221': 0.0, 'Q321': sum_q3q4, 'Q421': 0.0 }) # 将新增行添加到原DataFrame df = pd.concat([df, new_row.to_frame().T], axis=0) # 可选:重置索引 # df = df.reset_index(drop=True) print(df)
方案2:简洁写法
import pandas as pd data = { 'ID': ['AA', 'BB'], 'Q121': [8.0, 0.6], 'Q221': [4.8, 0.7], 'Q321': [3.1, 0.3], 'Q421': [5.3, 0.9] } df = pd.DataFrame(data) # 提取BB行的数值列 bb_vals = df.loc[df['ID'] == 'BB', ['Q121', 'Q221', 'Q321', 'Q421']].values[0] # 直接构造新增行DataFrame并合并 new_row = pd.DataFrame({ 'ID': ['NEW'], 'Q121': [bb_vals[0] + bb_vals[1]], 'Q221': [0.0], 'Q321': [bb_vals[2] + bb_vals[3]], 'Q421': [0.0] }) df = pd.concat([df, new_row], axis=0, ignore_index=True) print(df)
优化点说明
- 用
df['ID'] == 'BB'定位目标行,不依赖固定行索引,数据顺序变化也能正常工作 - 明确指定列名进行求和,避免切片歧义
- 构造完整的新增行数据,确保所有列符合期望格式
- 使用
pd.concat安全合并行,保持DataFrame结构完整性
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

