You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于列条件添加行并新增列的Pandas数据处理问题求解

问题与解决:为DataFrame添加分组统计列

需求说明

有一列名为value的字段,值包含a和b。需要为value为a的行添加total_a列(该行val1+val2+val3的和),为value为b的行添加total_b列(该行val1+val2+val3的和),其他列对应位置留空。

原始数据

value    val1    val2  val3
a         1       2     0
b         3       4     5
a         3       0     0
b         3       4     0

期望输出

value  val1  val2  val3  total_a  total_b
a        1     2     0     3        
b       3     4     5               12
a       3     0     0     3                  
b       3     4     0               7

尝试代码及报错

尝试代码:

df['total_b']=df['value'].str.contains('b').apply(np.sum,axis=1)

报错信息:there is no dimension of 0


错误原因

  1. 维度参数错误:df['value'].str.contains('b')返回的是一维布尔Series,而apply(np.sum, axis=1)中的axis=1是针对二维DataFrame的列方向参数,一维Series没有该维度,因此报错。
  2. 逻辑不符需求:代码试图对布尔值求和,完全没有匹配“计算对应行val列总和并分配到指定列”的需求。

正确实现代码

import pandas as pd
import numpy as np

# 构造原始DataFrame(如果已有数据可跳过此步)
df = pd.DataFrame({
    'value': ['a', 'b', 'a', 'b'],
    'val1': [1, 3, 3, 3],
    'val2': [2, 4, 0, 4],
    'val3': [0, 5, 0, 0]
})

# 计算每行val1+val2+val3的总和
row_total = df['val1'] + df['val2'] + df['val3']

# 根据value值分配到对应列,非目标行留空
df['total_a'] = np.where(df['value'] == 'a', row_total, np.nan)
df['total_b'] = np.where(df['value'] == 'b', row_total, np.nan)

# 将空值转为空白字符串,匹配期望输出格式
df = df.fillna('')

print(df)

执行后输出与期望完全一致:

value  val1  val2  val3 total_a total_b
0     a     1     2     0       3        
1     b     3     4     5              12
2     a     3     0     0       3        
3     b     3     4     0               7

内容的提问来源于stack exchange,提问作者workpyspark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:13:18