Форматирование условия с ошибкой значения посредством применения функции к фреймам данных - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь создать некоторые условия для фильтрации 2 столбцов в моей таблице.

 def Bull_Bear(Percent_from_high,Percent_from_low):
    if (Percent_from_low > 0.01) & (Percent_from_high < 0.001):
        return True
    elif (Percent_from_high > 0.010) & (Percent_from_low< 0.001):
        return False
    else:
        return 'N/A'

Итак, я пытаюсь создать новый столбец, чтобы возвращать либо True / False, либо N / A с учетом условий и вот что я написал:

df['Bull_Bear'] = df.apply(lambda x :Bull_Bear(df['Percent_from_high'],df['Percent_from_low']))

Мне вернули эту ошибку:

ValueError: ('Истинное значение Серии неоднозначно. Используйте a.empty, a .bool (), a.item (), a.any () или a.all (). ',' произошло в index Date ')

Есть идеи, что я здесь сделал не так?

1 Ответ

0 голосов
/ 10 мая 2020

Это векторизованное решение проблемы, которое будет лучше работать с большими наборами данных.

Создать фрейм данных.

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


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...