Home > OS >  iterating over each row in pandas to evaluate condition
iterating over each row in pandas to evaluate condition

Time:10-15

I have the following code

import pandas as pd
from pandas_datareader import data as web
import numpy as np
import math

data = web.DataReader('goog', 'yahoo')
df['lifetime'] = data['High'].asfreq('D').rolling(window=999999, min_periods=1).max() #To check if it is a lifetime high

How can i compare it so that i get a boolean (in 1 and 0 preferably) if df['High'] is close to its df['lifetime'] for each row in pandas:

data['isclose'] = math.isclose(data['High'], data['lifetime'], rel_tol = 0.003)

Any help would be appreciated.

CodePudding user response:

You can use np.where()

import numpy as np
import math

data['isclose'] = np.where(math.isclose(data['High'], data['lifetime'], rel_tol = 0.003), 1, 0)

CodePudding user response:

You could also use pandas' apply() function:

import math

from pandas_datareader import data as web

data = web.DataReader("goog", "yahoo")

data["lifetime"] = data["High"].asfreq("D").rolling(window=999999, min_periods=1).max()

data["isclose"] = data.apply(
    lambda row: 1 if math.isclose(row["High"], row["lifetime"], rel_tol=0.003) else 0,
    axis=1,
)

print(data)

However, yudhiesh's solution using np.where() is faster. See also: Why is np.where faster than pd.apply

  • Related