0
votes

Somme mobile personnalisée

Je voudrais créer une somme de cinq entrées à partir d'une table professionnelle. C'est à dire; Chaque ligne devrait être la somme de la taille des transactions précédentes. Le Snag est cet identifiant comme de ces 5 lignes seulement pour laisser tomber la rangée de prix la plus élevée et la plus basse.

est-ce possible?

rd

kdb

4 commentaires

Quel comportement attendez-vous quand il y a moins de 5 valeurs dans le seau? Toujours enlever le plus haut et le plus bas?


Pour les 2 premiers enregistrements, vous pouvez assumer aucune valeur n'existe. [NULL?] Pour le 3ème, il utiliserait uniquement le "milieu" seulement. Après le premier enregistrement, ce n'est pas un problème.


Q) T: ([[] P: 1 2 3 2 3 4 5; S: 2 3 4 5 4 3 2) Q) Q) Q) TPS --- 1 2 2 3 3 4 2 5 3 4 4 3 5 2 pour la rangée de firth Les tailles sont 2 3 4 5 4 4 le prix min est 1 (rangée de rangée) et le prix maximum est 3 (rangée 2) ainsi la somme est de 3 + 5 + 5 [dans des cas où 2 minutes ou maxes existent. première rangée ]


Hmmm, je ne comprends pas où vos 3 + 5 + 5 vient de. Vos tailles sont 2 3 4 5 4 Correspondant aux prix 1 2 3 2 3 . Si vous excluez prix = 1 et le premier du prix = 3 alors vous seriez parti avec des tailles 3 5 4 . Ou je manque quelque chose?


3 Réponses :


1
votes

On dirait que vous devriez pouvoir le faire avec une fenêtre coulissante avec une fonction personnalisée: xxx

par exemple.


6 commentaires

Je crois que OP recherche une solution dans KDB + / Q (Note KDB Tag), cela semble être Python?


N'a pas remarqué la balise. Mon erreur. Pensais que j'avais utilisé un filtre différent.


@Jonathonmcmurray Réponse mise à jour pour utiliser KDB.


Nice :) Je pense que votre réponse tombe une faute à droite à gauche en KDB, toutes les valeurs de X auront jusqu'à présent soustraites d'eux, le minimum de ces valeurs sera soustrait de chaque valeur de x avant la somme. Réécriture Func comme FUNC: {SOM [X] -MIN [X] -MAX [x]} devrait fonctionner. Une autre option serait FUNC: {SOM 1_-1_ASAS X} pour déposer le plus haut et le plus bas.


Non, il faudrait être {somme [x] -min [x] + max [x]} mais cela ne couvre pas le boîtier de bord (possible) du moment où il y a moins de 5 valeurs .


@Terrylynch Yep, est revenu pour commenter que quand je pensais que ça passe un peu plus!



2
votes

Je pense que cette fonction fonctionnera xxx

la fonction w permettra la sélection et la suppression des tailles correspondant aux prix max et min. Ceci est fait dans la mise à jour par (Taille MSUM) - (Top + Bot). Malheureusement, il y a un problème avec le premier élément, je vais commenter une solution à cela si j'en trouve un.


2 commentaires

Oui - Les autres solutions ne comptaient pas le fait que c'est la somme des tailles basées sur l'élimination des prix maximum / min plutôt que la somme des tailles basée sur la suppression de max / min taille . Rend le problème beaucoup plus délicat. Ce qui le rend encore plus difficile, c'est qu'il doit probablement être fait par sym


D'accord, bien que vous ayez toujours un négatif sur la première rangée de chaque SM. Cela pourrait être fixé avec un plancher de zéro, en utilisant update rms: 0 | (taille de 5 msum) - ((taille w [{x? Max x}; 5; Prix]) + (taille w [x? min x}; 5; Prix])) Du commerce



0
votes

Une autre approche (par SYM):

q)t:([]sym:20?`a`b`c;px:20?1.0;sz:20?1000)
q)update msz:{sum((),x`sz)@-1_1_iasc(),x`px}each{-5 sublist'x,'y}\[([]px;sz)] by sym from t
sym px         sz  msz
-----------------------
c   0.4707883  908 0
a   0.6346716  360 0
b   0.9672398  522 0
a   0.2306385  257 0
a   0.949975   858 360
a   0.439081   585 945
c   0.5759051  90  0
c   0.5919004  683 90
c   0.8481567  90  773
b   0.389056   869 0
b   0.391543   468 468
a   0.08123546 959 1202
b   0.9367503  221 689
c   0.2782122  694 1681
c   0.2392341  934 1467
a   0.1508133  865 1707
a   0.1567317  344 1794
b   0.9785     997 1211
a   0.7043314  314 1794
b   0.9441671  580 1269


0 commentaires