Pandas如何根据列B最近负数值对比列A值完成列B的填充修改
解决方案
import pandas as pd # 构造原始DataFrame data = {'Column A':[400, 522, 633, 744, 150, 140, 119, 744, 150, 400, 390, 315, 744, 150, 400, 522, 500, 633, 744, 204, 215, 150], 'Column B':[400, 0, 0, 0, -150, 0, 0, 744, 0, -400, 0, 0, -744, 0, -400, 0, 0, -633, 0, 0, 0, 150]} df = pd.DataFrame(data) # 存储最近一次Column B负数值的绝对值 last_neg_abs = None # 逐行遍历处理 for idx, row in df.iterrows(): b_val = row['Column B'] # 遇到负数,更新最新的负数值绝对值 if b_val < 0: last_neg_abs = abs(b_val) continue # 非0值不修改 if b_val != 0: continue # 还没出现过负数,不处理 if last_neg_abs is None: continue # 判断是否低于阈值:比绝对值低20%以上即小于绝对值*0.8 if row['Column A'] < last_neg_abs * 0.8: df.loc[idx, 'Column B'] = row['Column A'] # 输出结果验证 print(df)
逻辑说明
- 维护
last_neg_abs变量记录当前行之前最后一次出现的Column B负数值的绝对值,遇到新的负数时自动更新 - 仅对Column B原始值为0的行做修改判断,原始非0值(正负均包含)会完全保留
- 运行后输出结果和需求示例完全一致
内容的提问来源于stack exchange,提问作者Gus
相关产品推荐
相关产品推荐

