J'ai un dataframe pandas qui ressemble à ceci:
Copy sequence type ntv
1 1 A 0.45
1 1 R2 0.878
1 1 R3 1.234
1 2 A -7.890
1 2 R2 2.345
1 2 R3 -0.871
2 1 A -0.098
2 1 R2 -0.007
2 1 R3 9.089
2 2 A 1.567
2 2 R2 -0.764
2 2 R3 17.908
3 1 A 4.980
3 1 R2 2.34
3 1 R3 1.280
3 2 A -9.189
3 2 R2 -7.09
3 2 R3 -0.009
La trame de données est constituée de 3 copies comme dans la première colonne. Chacune de ces copies contient les mêmes éléments, c'est-à-dire qu'elles ont chacune 2 séquences, elles-mêmes constituées de 3 types différents : A, R2 et R3.
Comment puis-je créer un dictionnaire d'un dictionnaire d'un dictionnaire qui ressemble à ceci :
d1 = {sequence:{type:{Copy:ntv}}}
Alors que par exemple si je dis :
d2 = d1[1][‘R2’]
rank = sorted(d2.items(), key =operator.itemgetter(1))
pprint(rank)
Il doit imprimer un dictionnaire (illustré ci-dessous) où toutes les valeurs ntv ont été triées, indiquant quel numéro de copie a la valeur ntv la plus faible ou la plus élevée pour la séquence 1 de type R2.
{2: -0.007,
1: 0.878,
3: 2.34}
Aussi, j'attends vos suggestions avec impatience si vous avez de meilleures idées sur la façon de s'y prendre. Merci d'avance!
Vous pouvez faire qc selon ces lignes, en utilisant un collections.defaultdict
:
from collections import defaultdict
def nested_dict():
return defaultdict(nested_dict)
d = nested_dict()
for _, row in df.iterrows():
d[row['sequence']][row['type']][row['Copy']] = row['ntv']
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots