1
votes

Les pandas classent un entier négatif et positif, plusieurs colonnes

Je ne suis pas mathématicien, je suis un spécialiste des finances et je suis confronté à un problème qu'il vaut mieux décrire comme suit: Je cherche des conseils sur la façon de classer deux séries d'entiers, dont l'une a un domaine à la fois en valeurs positives et négatives et l'autre n'a qu'un domaine positif.

Des valeurs positives élevées de X sont souhaitées, des valeurs négatives élevées sont indésirables.

Y est limité à des valeurs positives, des valeurs élevées ne sont pas souhaitées, des valeurs faibles sont souhaitées.

Ma meilleure estimation à ce jour a été:

Dans le domaine positif ce rapport a du sens: X / Y

Dans le domaine négatif (1 / X * Y) a tendance à avoir du sens, mais je soupçonne qu'il impose une asymétrie.

Supposons c'est la série triée idéale de X et 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 et 2.5 sont numériquement et conceptuellement similaires (indifférence).

Y a-t-il une fonction que vous pourriez penser à utiliser pour classer et capturer cette logique?

Une limite dure est que X positif est toujours meilleur que X négatif, donc des valeurs négatives de X ne doit jamais être classé au-dessus des valeurs positives de X.


3 commentaires

Alors votre classement attendu pour 10 100 le moins bien classé ou le mieux classé en termes de valeur? 1 étant le moins (IMO)


10 100 est le choix dominant, la meilleure de toutes les alternatives (rang le plus élevé).


Oui, je voulais dire le plus élevé étant le rang le plus bas en termes de nombres? sinon ma réponse devrait suffire. :)


3 Réponses :


0
votes

Votre hypothèse d'utilisation de X / Y (si Y accepte 0, assurez-vous d'utiliser X / 1 + Y) est correcte. Maintenant, la question est de savoir quelle importance accordez-vous à X et Y? et b .

puisque l'importance de X augmente à mesure que sa valeur augmente, u peut même utiliser x ^ 3 et punir des termes négatifs plus élevés et récompenser des termes positifs plus élevés.

En arrivant à y, 1 / (1 + y ^ 2) si (y accepte 0, 1/0 n'est pas défini alors ajoutez-y 1.)


0 commentaires

1
votes

Si vous connaissez la valeur minimale de votre série X, alors le mieux est probablement d'utiliser le score suivant:

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

Si vous voulez aller plus loin, vous pouvez même normaliser à la fois X et Y en exécutant:

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

puis exécutez score = X / Y


0 commentaires

1
votes

J'ai utilisé la série .rank () comme ci-dessous:

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

Explication dans la documentation dans le lien fourni.


2 commentaires

Avec cette solution, les valeurs négatives de X peuvent être étroitement classées aux valeurs positives de X, en fonction de Y. Ce n'est pas conceptuellement ce que je recherche: le X positif domine le X négatif, indépendamment de Y. Des indices?


@Willem pourquoi ne pas simplement aller avec X pour le classement alors? df.X.rank (method = 'dense', ascending = True) ??