Как создать новый столбец в фрейме данных на основе условий?

У меня есть фрейм данных со столбцом NEGATIVE_AMT. Значения внутри столбцов NEGATIVE_AMT находятся в диапазоне от 0 до 72000.

NEGATIVE_AMT
0
1200
50000
22000
28000
 and so on .. 

Теперь я хочу создать новый столбец в фрейме данных как NEGATIVE_AMT_PERCENTILE, и значения внутри столбца должны основываться на следующих 4 условиях:

  1. Если отрицательный_амт меньше 25-го процентиля значения, то NEGATIVE_AMT_PERCENTILE = значение 25-го процентиля.

  2. Если отрицательный_амт меньше 50-го процентиля значения, но больше 25-го процентиля, тогда NEGATIVE_AMT_PERCENTILE = значение 50-го процентиля.

  3. Если отрицательный_амт меньше 75-го процентиля значения, но больше 50-го процентиля, тогда NEGATIVE_AMT_PERCENTILE = значение 75-го процентиля.

  4. Если отрицательная_амортизация больше 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

Мой код выдает ошибку «Неверный синтаксис». Любая помощь будет оценена

Почему >75-й процентиль сопоставляется с 75-м процентилем? №3 и №4 делают то же самое.

ddejohn 16.03.2022 20:23

Какая ошибка в вашем коде? Пожалуйста, укажите образец вашего ожидаемого результата и как он отличается от вашего фактического результата. Также исправьте опубликованный вами код, так как в настоящее время он не является допустимым синтаксисом Python.

ddejohn 16.03.2022 20:23

Пожалуйста, также уточните: "отрицательное значение меньше 25-го процентиля Значение", какое значение?

ddejohn 16.03.2022 20:24

любое значение, которое меньше 25-го процентиля значения, должно быть заменено значением 25-го процентиля. в моих данных значение 25-го процентиля равно 150, поэтому любое значение меньше 150 следует заменить на 150 .

kaaviya 16.03.2022 20:26

да, 3-е и 4-е условие должны делать то же самое.

kaaviya 16.03.2022 20:27
numpy.select, вероятно, полезнее, чем numpy.where здесь
Paul H 16.03.2022 20:34

«да, 3-е и 4-е условие должны делать одно и то же», тогда зачем возиться с отдельными условиями? Просто сделайте «если больше 50-го процентиля, сделайте значение 75-го процентиля».

ddejohn 16.03.2022 20:40

может кто-нибудь помочь мне с кодом. Мой код выдает ошибку

kaaviya 16.03.2022 20:51

Опубликуйте свою ошибку, а также просмотрите как задать хороший вопрос и как предоставить минимальный воспроизводимый пример.

ddejohn 16.03.2022 20:52

Ошибка гласит "неверный синтаксис"

kaaviya 16.03.2022 21:00

@kaaviya ответили на твой вопрос? Если это так, пожалуйста, ответьте как принятый, чтобы ваш пост был удален из очереди без ответа.

ddejohn 19.03.2022 04:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
11
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что это достигает того, что вам нужно, но, поскольку вы не предоставили минимальный воспроизводимый пример, я не могу подтвердить.

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

Другие вопросы по теме