如何根据行求和阈值(<1.0)批量更新数据集数值字段为0?
问题解决:将含'Q'列求和小于1的行对应字段置0
需求说明
当数据行中名称含'Q'的数值列求和结果小于1.0时,将该行的这些数值字段全部更新为0。目前已完成每行含'Q'列的求和计算(代码:df['sum']=df.filter(like='Q').sum(axis=1)),需要完成后续字段替换操作。
原始数据
ID type Q1 24 Q2 24 Q3 24 Q4 24 AA hey 2.0 1.2 0.5 0.6 AA hello 0.7 2.0 0.6 0.6 AA hi 0.1 0.1 0.1 0.1 AA good 0.3 0.4 0.2 0.2
期望结果
ID type Q1 24 Q2 24 Q3 24 Q4 24 AA hey 2.0 1.2 0.5 0.6 AA hello 0.7 2.0 0.6 0.6 AA hi 0.0 0.0 0.0 0.0 AA good 0.3 0.4 0.2 0.2
解决步骤
方法1:基于已计算的sum列完成替换
如果你已经保留了sum列,可通过布尔索引定位目标行,再批量修改对应字段:
# 定位求和小于1.0的行 mask = df['sum'] < 1.0 # 获取所有含'Q'的列名 q_columns = df.columns[df.columns.str.contains('Q')] # 将符合条件的行的Q列置0 df.loc[mask, q_columns] = 0
方法2:无需额外sum列,一步完成(更高效)
直接在条件判断中计算每行Q列的和,省去中间列的创建:
# 获取所有含'Q'的列名 q_columns = df.columns[df.columns.str.contains('Q')] # 直接筛选求和小于1的行,并将对应Q列置0 df.loc[df[q_columns].sum(axis=1) < 1.0, q_columns] = 0
验证结果
执行上述代码后,数据将与期望结果一致,第三行的所有Q列数值会被替换为0。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

