1

I have the following dataframe:

import pandas as pd
import numpy as np
data = {
    "index": [1, 2, 3, 4, 5],
    "v1": [1100, 1776, 1228, 1640, np.NaN],
    "v2": [1000, 1805, 1231, 1425, 1800],
    "result": ['Y', 'Y', 'Y', 'N', 'N']
}
df = pd.DataFrame.from_dict(data)
print(df)

I would like to check if column v1 is in interval of column v2 ± 100 (or [v2*0.95, v2*1.05]). How can i do it in Python? thanks for your help. Here is my final result example:

    index    v1      v2    result
0      1  1100.0    1000      Y
1      2  1776.0    1805      Y
2      3  1228.0    1231      Y
3      4  1640.0    1425      N
4      5     NaN    1800      N
ah bon
  • 9,293
  • 12
  • 65
  • 148

2 Answers2

2

For v1 in [v2*0.95, v2*1.05] use:

df['res'] = ''
for idx, val in enumerate(df.itertuples()):
    if df.loc[idx,'v1'] > df.loc[idx,'v2'] * 0.95 and df.loc[idx,'v1'] < df.loc[idx,'v2'] * 1.05:
        df.loc[idx, 'res'] = 'Yes'
    else:
        df.loc[idx, 'res'] = 'No'


+---+-------+--------+--------+------+-----+
|   | index | result |   v1   |  v2  | res |
+---+-------+--------+--------+------+-----+
| 0 |     1 | Y      | 1100.0 | 1000 | No  |
| 1 |     2 | Y      | 1776.0 | 1805 | Yes |
| 2 |     3 | Y      | 1228.0 | 1231 | Yes |
| 3 |     4 | N      | 1640.0 | 1425 | No  |
| 4 |     5 | N      | NaN    | 1800 | No  |
+---+-------+--------+--------+------+-----+
meW
  • 3,832
  • 7
  • 27
2

Just using

(df.v1-df.v2).abs().le(100).map({True:'Yes',False:'No'})
Out[60]: 
0    Yes
1    Yes
2    Yes
3     No
4     No
dtype: object
BENY
  • 317,841
  • 20
  • 164
  • 234