Pandas使用iloc进行列求和时仅更新非零值的实现问题
你可以用pandas原生的向量化where方法实现需求,全程不需要提前遍历判断列是否包含0值,对大型DataFrame的执行效率也很高:
# 先提取目标操作区域,计算各列求和结果 target_area = data.iloc[:, 1:] col_sum_res = target_area.sum(axis=0) # 仅更新原值不为0的位置,0值保持不变 data.iloc[:, 1:] = target_area.where(target_area == 0, col_sum_res, axis=1)
逻辑说明
where方法的规则为:当位置的值满足第一个参数的判断条件时,保留原值,否则替换为第二个参数的对应值- 这里设置判断条件为
target_area == 0,即原值为0时保留,原值非0时替换为对应列的求和结果 - 参数
axis=1用于保证求和结果按列匹配,避免维度对齐错误
如果追求更精简的写法,也可以合并为一行代码:
data.iloc[:,1:] = data.iloc[:,1:].where(data.iloc[:,1:] == 0, data.iloc[:,1:].sum(axis=0), axis=1)
内容的提问来源于stack exchange,提问作者Roland
相关产品推荐
相关产品推荐

