Панды ранжируют отрицательное и положительное целое число, несколько столбцов - PullRequest
0 голосов
/ 25 января 2019

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

Желательны высокие положительные значения X, высокие отрицательные значения нежелательны.

Y ограничен положительными значениями, высокие значения нежелательны, низкие значения желательны.

Мое лучшее предположение до сих пор было:

В положительной области это соотношение имеет смысл: X / Y

В отрицательной области (1 / X * Y) имеет смысл, но я подозреваю, что это накладывает асимметрию.

Давайте предположим, что это идеальная отсортированная серия X и Y

X, Y, rank
10,100, 6
10,1000, 5.5
1,100, 5.5
1,1000, 4
-1,100, 3
-1,1000, 2.5
-10,100, 2.5
-10,1000, 1

5.5 и 2.5 численно и концептуально похожи (равнодушие).

Есть ли какая-нибудь функция, которую вы могли бы использовать для ранжирования и захвата этой логики?

Жестким ограничением является то, что положительный X всегда лучше отрицательного X, поэтому отрицательные значения X никогда не должны оцениваться выше положительных значений X.

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Если вам известно минимальное значение вашей серии X, то, вероятно, лучше всего использовать следующую оценку:

(X + Xmin)/Y # Adding the minimal value as an offset is a standard procedure to obtain only positive values. 

Если вы хотите пойти дальше, вы можете даже нормализовать X и Y, выполнив:

X = (X + Xmin) / Xmax
Y = (Y + Ymin) / Ymax

, а затем выполнить оценку = X / Y

0 голосов
/ 25 января 2019

Я использовал series.rank(), как показано ниже:

df['new_rank']=df.X.rank(method='dense',ascending=True)+df.Y.rank(method='dense',ascending=False)-1
print(df)

    X     Y  rank  new_rank
0  10   100   6.0       5.0
1  10  1000   5.5       4.0
2   1   100   5.5       4.0
3   1  1000   4.0       3.0
4  -1   100   3.0       3.0
5  -1  1000   2.5       2.0
6 -10   100   2.5       2.0
7 -10  1000   1.0       1.0

Объяснение в документации по предоставленной ссылке.

0 голосов
/ 25 января 2019

Ваше предположение об использовании X/Y (если Y принимает 0, убедитесь, что вы используете X / 1 + Y) правильно.Теперь вопрос в том, насколько большое значение вы придаете X и Y? Я имею в виду, предположим, (aX)* (b*(1/y)) Теперь все имеет значение для a и b.

, так как важность X увеличивается с увеличением его значения, вы можете даже использовать x ^ 3 и наказывать более высокие отрицательные условия и вознаграждать более высокие положительные условия.

Приходя к y, 1/(1+y^2) if (y принимает 0, 1/0 не определено, поэтому добавьте 1 к нему.)

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