У меня есть фрейм данных со столбцом NEGATIVE_AMT. Значения внутри столбцов NEGATIVE_AMT находятся в диапазоне от 0 до 72000.
NEGATIVE_AMT
0
1200
50000
22000
28000
and so on ..
Теперь я хочу создать новый столбец в фрейме данных как NEGATIVE_AMT_PERCENTILE, и значения внутри столбца должны основываться на следующих 4 условиях:
Если отрицательный_амт меньше 25-го процентиля значения, то NEGATIVE_AMT_PERCENTILE = значение 25-го процентиля.
Если отрицательный_амт меньше 50-го процентиля значения, но больше 25-го процентиля, тогда NEGATIVE_AMT_PERCENTILE = значение 50-го процентиля.
Если отрицательный_амт меньше 75-го процентиля значения, но больше 50-го процентиля, тогда NEGATIVE_AMT_PERCENTILE = значение 75-го процентиля.
Если отрицательная_амортизация больше 75-го процентиля значения, то NEGATIVE_AMT_PERCENTILE = значение 75-го процентиля.
я пытался использовать np.where, но в моем коде есть ошибка: я пытался сделать
df['NEGATIVE_AMT_PERCENTILE) = np.where(df['NEGATIVE_AMT]< df['NEGATIVE_AMT'].quantile(0.25), df['NEGATIVE_AMT'].quantile(0.25),
np.where((df['NEGATIVE_AMT]< df['NEGATIVE_AMT'].quantile(0.50) & df['NEGATIVE_AMT] > df['NEGATIVE_AMT'].quantile(0.25), df['NEGATIVE_AMT'].quantile(0.50),
np.where((df['NEGATIVE_AMT]< df['NEGATIVE_AMT'].quantile(0.75) & df['NEGATIVE_AMT] > df['NEGATIVE_AMT'].quantile(0.50), df['NEGATIVE_AMT'].quantile(0.75),
np.where(df['NEGATIVE_AMT]> df['NEGATIVE_AMT'].quantile(0.75), df['NEGATIVE_AMT'].quantile(0.75))
если, например, мой 25-й процентиль равен 150, 50-й процентиль равен 2000, 75-й процентиль равен 25000, а 100-й процентиль равен 72000. Тогда мой ожидаемый результат должен быть
Expected Output
NEGATIVE_AMT| NEGATIVE_AMT_PERCENTILE
0 | 150
1200 | 2000
50000 | 25000
22000 | 25000
28000 | 25000
Мой код выдает ошибку «Неверный синтаксис». Любая помощь будет оценена
Какая ошибка в вашем коде? Пожалуйста, укажите образец вашего ожидаемого результата и как он отличается от вашего фактического результата. Также исправьте опубликованный вами код, так как в настоящее время он не является допустимым синтаксисом Python.
Пожалуйста, также уточните: "отрицательное значение меньше 25-го процентиля Значение", какое значение?
любое значение, которое меньше 25-го процентиля значения, должно быть заменено значением 25-го процентиля. в моих данных значение 25-го процентиля равно 150, поэтому любое значение меньше 150 следует заменить на 150 .
да, 3-е и 4-е условие должны делать то же самое.
numpy.select
, вероятно, полезнее, чем numpy.where
здесь
«да, 3-е и 4-е условие должны делать одно и то же», тогда зачем возиться с отдельными условиями? Просто сделайте «если больше 50-го процентиля, сделайте значение 75-го процентиля».
может кто-нибудь помочь мне с кодом. Мой код выдает ошибку
Опубликуйте свою ошибку, а также просмотрите как задать хороший вопрос и как предоставить минимальный воспроизводимый пример.
Ошибка гласит "неверный синтаксис"
@kaaviya ответили на твой вопрос? Если это так, пожалуйста, ответьте как принятый, чтобы ваш пост был удален из очереди без ответа.
Я считаю, что это достигает того, что вам нужно, но, поскольку вы не предоставили минимальный воспроизводимый пример, я не могу подтвердить.
import numpy as np
quantiles = df.quantile([0.25, 0.5, 0.75]).values.reshape(3,)
q1, q2, q3 = quantiles
conditions = [df.NEGATIVE_AMT < q1, df.NEGATIVE_AMT.between(q1, q2), df.NEGATIVE_AMT > q2]
output = np.select(conditions, quantiles)
Обратите внимание, что в своем вопросе вы не указываете, что следует делать на границах этих порогов. df.NEGATIVE_AMT.between(q1, q2)
включает обе конечные точки, поэтому ваши условия эквивалентны:
x < q1 -> q1
q1 <= x <= q2 -> q2
x > q2 -> q3
Почему >75-й процентиль сопоставляется с 75-м процентилем? №3 и №4 делают то же самое.