Это векторизованное решение проблемы, которое будет лучше работать с большими наборами данных.
Создать фрейм данных.
df = pd.DataFrame(
{
"Percent_from_high": np.random.uniform(low=-1, high=1, size=(50,)),
"Percent_from_low": np.random.uniform(low=-1, high=1, size=(50,)),
}
)
Добавьте новый столбец с np.nan.
df["Bull_Bear"] = np.nan
Создайте два набора масок.
mask1a = df["Percent_from_low"] > 0.01
mask1b = df["Percent_from_high"] < 0.001
mask2a = df["Percent_from_high"] > 0.01
mask2b = df["Percent_from_low"] < 0.001
Присваивать значения при фильтрации.
df.loc[mask1a & mask1b, "Bull_Bear"] = True
df.loc[mask2a & mask2b, "Bull_Bear"] = False
Результат:
print(df.head(10))
Percent_from_high Percent_from_low Bull_Bear
0 0.9743 -0.7118 False
1 0.1564 0.1861 NaN
2 0.9408 0.3726 NaN
3 -0.7476 0.6435 True
4 0.4863 -0.7650 False
5 0.7512 -0.2044 False
6 -0.7848 0.5729 True
7 -0.6985 -0.3628 NaN
8 0.1579 -0.7709 False
9 -0.2554 -0.7636 NaN