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. P>
est-ce possible? P>
rd p>
3 Réponses :
On dirait que vous devriez pouvoir le faire avec une fenêtre coulissante avec une fonction personnalisée: par exemple. p> p>
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]} code> devrait fonctionner. Une autre option serait
FUNC: {SOM 1_-1_ASAS X} code> pour déposer le plus haut et le plus bas.
Non, il faudrait être {somme [x] -min [x] + max [x]} code> 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!
Je pense que cette fonction fonctionnera la fonction w code> 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. P> p>
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 i> plutôt que la somme des tailles basée sur la suppression de max / min taille I>. 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 code>
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 code>
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
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 Code> Correspondant aux prix
1 2 3 2 3 Code>. Si vous excluez
prix = 1 code> et le premier du prix
= 3 code> alors vous seriez parti avec des tailles
3 5 4 code>. Ou je manque quelque chose?