У меня есть dataframe (df) с 10 столбцами. Индекс имеет много разных дат, однако есть несколько идентичных дат (и сортируется по дате). Кроме того, важными столбцами для этой проблемы являются df ['Weight'] и df ['Price'].Я просматриваю каждую отдельную дату в кадре данных Pandas и настраиваю один столбец (вес), основываясь на условии на другом столбце для каждой даты
Вот пример данных с 2-мя колонками только 1 значение индекса (1/21/2017), на самом деле есть несколько дат с несколькими весами и т.д.
Weight Price
1/21/2017 0.1 12
1/21/2017 0.04 21
1/21/2017 0.03 13
1/21/2017 0.02 22
1/21/2017 0.2 27
1/21/2017 0.001 30
1/21/2017 0.1 34
1/21/2017 0.21 21
1/21/2017 0.003 12
1/21/2017 0.01 32
1/21/2017 0.04 21
1/21/2017 0.005 12
1/21/2017 0.05 10
1/21/2017 0.1 3
1/21/2017 0.091 24
Веса добавить до 1 для конкретного индекса, и это верно для каждой уникальной даты индекса.
Теперь я пытаюсь создать столбец df ['скорректированный вес "], который будет основываться на проценте ранга каждого значения цены за конкретную дату.
Цена, которая находится в середине 80% относительно других цен на определенную дату, df ['скорректированный вес] будет равна df [' Weight '].
Для нижних 10% цен на конкретную дату df ['Adjusted weight'] будет df ['Weight']/2.
Для лучших 10% Цены на любую дату, нам нужно настроить скорректированный вес так, чтобы новый DF [скорректированный вес '] для этой даты в настоящее время будет равным 1.
Это будет сделано путем деления все веса, где цена находится в топ-10% на дату текущей суммы веса 10% -ных цен, а затем умножается на это самим номером + сумма веса, которая была отрублена снизу 10 %, чтобы сделать его еще 1.
Вот выход я желаю:
Weight Price Percent rank Adjusted Weight
1/21/2017 0.1 12 0.142 0.1
1/21/2017 0.04 21 0.428 0.04
1/21/2017 0.03 13 0.357 0.03
1/21/2017 0.02 22 0.642 0.02
1/21/2017 0.2 27 0.785 0.2
1/21/2017 0.001 30 0.857 0.001
1/21/2017 0.1 34 1 **0.168181818**
1/21/2017 0.21 21 0.428 0.21
1/21/2017 0.003 12 0.142 0.003
1/21/2017 0.01 32 0.928 **0.016818182**
1/21/2017 0.04 21 0.428 0.04
1/21/2017 0.005 12 0.142 0.005
1/21/2017 0.05 10 0.071 **0.025**
1/21/2017 0.1 3 0 **0.05**
1/21/2017 0.091 24 0.714 0.091
Я поставил ** вокруг ценностей, которые были изменены, и coincedentally имеются 2 значения в нижней 10% проц ранга и 2 значения в 10% топ ранг. Для нижних значений 2, его справедливого веса/2 и для верха 2 я написал эту формулу в excel, = E8/(E11 + E8) * (E11 + E8 + E15 + E14- (H15 + H14)), где та таблица охватывает от D1 до H16.
Это довольно сложная проблема, но я надеюсь, что ее попросят разумным образом. Если бы кто-нибудь мог посоветовать и помочь, я бы очень это оценил. Спасибо за чтение и любовь, чтобы услышать идеи, которые я получаю. Кроме того, набор данных большой, поэтому я не уверен, сколько времени потребуется, поскольку для каждой даты потребуется выполнить одну и ту же работу.
Я хотел бы, чтобы скорректированный вес был новым столбцом, который существует вместе с оригинальными весами. Кроме того, что-то, что будет работать с другими столбцами, а также цена будет отлично.
Спасибо всем за помощь и поддержку.
С наилучшими пожеланиями.
Спасибо. Я использовал этот код, но я хочу спросить, как я боролся, как бы добавить это как другой столбец, а не заменять мою существующую таблицу весов, а также попытаюсь использовать эту функцию для других столбцов, а также цену, но по какой-то причине значения выходите так же. Я очень ценю ваш ответ - – MysterioProgrammer91