基于一列在另一列的+/5%以内创建一个指示符列

2024-03-28 21:44:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据这两个费用列填充“指标”列。如果“Charge1”在“Charge2”值的正负5%范围内,请将“Indicator”设置为RFP,否则留空(参见下面的示例)。你知道吗

ID  Charge1  Charge2  Indicator
1   9.5      10       RFP
2   22       20 
3   41       40       RFP
4   65       80 
5   160      160      RFP
6   315      320      RFP
7   613      640      RFP
8   800      700    
9   759      800    
10  1480     1500     RFP

我尝试使用.loc方法,但很难确定“Charge1”是否在“Charge2”的+/-5%之内。你知道吗


Tags: 方法id示例指标locindicator费用rfp
3条回答

非常简单,根据Charge1和Charge2之间的百分比差异创建一个“指示符”系列布尔值。你知道吗

df = pd.read_clipboard()
threshold = 0.05
indicator = ( (df['Charge1'] / df['Charge2']) - 1).abs() <= threshold
df.loc[indicator]

设置一个阈值,并将其值与之进行比较。你知道吗

如果值在阈值内,则返回true,因此可以直接使用指示符(布尔序列)作为.loc的输入。你知道吗

In [190]: df.loc[df.eval("Charge2*0.95 <= Charge1 <= Charge2*1.05"), 'RFP'] = 'REP'

In [191]: df
Out[191]:
   ID  Charge1  Charge2  RFP
0   1      9.5       10  REP
1   2     22.0       20  NaN
2   3     41.0       40  REP
3   4     65.0       80  NaN
4   5    160.0      160  REP
5   6    315.0      320  REP
6   7    613.0      640  REP
7   8    800.0      700  NaN
8   9    759.0      800  NaN
9  10   1480.0     1500  REP

试试看

cond = ((df['Charge2'] - df['Charge1'])/df['Charge2']*100).abs() <= 5
df['Indicator'] = np.where(cond, 'RFP', np.nan)


    ID  Charge1 Charge2 Indicator
0   1   9.5     10      RFP
1   2   22.0    20      nan
2   3   41.0    40      RFP
3   4   65.0    80      nan
4   5   160.0   160     RFP
5   6   315.0   320     RFP
6   7   613.0   640     RFP
7   8   800.0   700     nan
8   9   759.0   800     nan
9   10  1480.0  1500    RFP

相关问题 更多 >