Pandas DataFrame逐行累计求和超3时替换当前1为0的实现问题
pandas DataFrame逐元素遍历修改实现方案
原代码问题
- 仅遍历行索引,没有逐列遍历每个单元格,直接整行赋值不符合仅修改值为1的单元格的要求
LOL3.iloc[:i].sum()返回的是按列求和的Series,不是所有已遍历数值的全局累计和- 未对NaN值做判断保留,也没有限定仅修改值为1的单元格
正确实现
import pandas as pd # 复制原数据避免修改原始表 LoL3_res = LoL3.copy() # 累计和变量,存储遍历到当前位置之前所有非NaN值的总和 cum_total = 0 row_count = len(LoL3_res) col_count = len(LoL3_res.columns) # 按行从上到下遍历 for i in range(row_count): # 按列从左到右遍历当前行的所有单元格 for j in range(col_count): val = LoL3_res.iloc[i, j] # NaN值直接跳过不处理 if pd.isna(val): continue # 若当前位置前累计和大于等于3(匹配预期输出调整为>=,如需严格按需求描述可改为>)且当前值为1,修改为0 if cum_total >= 3 and val == 1: LoL3_res.iloc[i, j] = 0 # 将当前单元格最终值加入累计和,用于后续判断 cum_total += LoL3_res.iloc[i, j]
结果说明
运行上述代码后得到的LoL3_res和预期输出完全匹配,T2列的NaN值全部保留,第四行T4列的1、第五行T5列的1会被修改为0,其余数值保持不变。
内容的提问来源于stack exchange,提问作者Mart Vos
相关产品推荐
相关产品推荐

