You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Charge1与Charge2的±5%差异生成Indicator列的技术求助

解决Charge1与Charge2±5%范围判断并填充Indicator列的问题

我来帮你搞定这个需求!其实核心就是把判断逻辑转化为pandas能识别的布尔条件,再用.loc或者numpy.where来赋值,咱们具体来看:

核心判断逻辑

要让Charge1处于Charge2的正负5%范围内,等价于Charge1同时满足:

  • 大于等于 Charge2 的 95%(Charge2 * 0.95)
  • 小于等于 Charge2 的 105%(Charge2 * 1.05)

方法1:使用.loc实现赋值

这是你一开始尝试的方法,只要把条件写对就能生效:

import pandas as pd

# 假设你的数据存储在名为df的DataFrame中
# 先初始化Indicator列为空字符串
df['Indicator'] = ''

# 用.loc筛选符合条件的行,设置Indicator为'RFP'
df.loc[
    (df['Charge1'] >= df['Charge2'] * 0.95) & 
    (df['Charge1'] <= df['Charge2'] * 1.05), 
    'Indicator'
] = 'RFP'

⚠️ 注意:这里的&是pandas的逻辑与运算符,每个条件必须用括号单独括起来,否则会触发运算优先级错误。

方法2:用numpy.where一行搞定

如果想更简洁,可以用numpy.where函数,它能根据条件直接返回对应的值:

import pandas as pd
import numpy as np

df['Indicator'] = np.where(
    (df['Charge1'] >= df['Charge2'] * 0.95) & (df['Charge1'] <= df['Charge2'] * 1.05),
    'RFP',  # 条件满足时赋值为'RFP'
    ''      # 条件不满足时留空
)

额外注意事项

如果你的数据中Charge2存在0值,那0的±5%还是0,此时只有当Charge1也为0时才会被标记为RFP。如果这不符合你的业务需求,可以额外添加排除Charge2 == 0的条件,比如:

df.loc[
    (df['Charge2'] != 0) & 
    (df['Charge1'] >= df['Charge2'] * 0.95) & 
    (df['Charge1'] <= df['Charge2'] * 1.05), 
    'Indicator'
] = 'RFP'

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:09:12