基于列条件添加行并新增列的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
错误原因
- 维度参数错误:
df['value'].str.contains('b')返回的是一维布尔Series,而apply(np.sum, axis=1)中的axis=1是针对二维DataFrame的列方向参数,一维Series没有该维度,因此报错。 - 逻辑不符需求:代码试图对布尔值求和,完全没有匹配“计算对应行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
相关产品推荐
相关产品推荐

