J'ai des listes d'identifiants et de partitions: Je veux supprimer des duplicats des identifiants de liste afin que les scores se résondent en conséquence. C'est quelque chose de très similaire à ce que Groupby.sum () Est-ce que lorsque vous utilisez des dataframes. p> Donc, comme la sortie que j'attends: p> J'utilise le code suivant, mais cela ne fonctionne pas bien pour tous les cas: p>
6 Réponses :
Vous pouvez créer un dictionnaire à l'aide d'IDs code> et scores code> avec la touche comme éléments de
ID code> et valeurs comme la liste des éléments correspondant à un Élément dans
ID code>, vous pouvez résumer les valeurs et obtenir votre nouveau
ID code> et
scores code> Liste
Comme suggéré dans des commentaires, l'utilisation d'un dictionnaire est une solution. Vous pouvez itérer une fois sur la liste et mettre à jour la somme par identifiant.
Si vous souhaitez deux listes à la fin, sélectionnez les touches TOUCHES CODE> et
Valeurs CODE> avec
clés () code> et
valeurs () code> provenant du dictionnaire: p>
Tout simplement boucler à travers eux et ajouter si les identifiants correspondent.
[1, 2, 3] [60, 20, 40]
# Find all unique ids and keep track of their scores id_to_score = {id : 0 for id in set(ids)} # Sum up the scores for that id for index, id in enumerate(ids): id_to_score[id] += scores[index] unique_ids = [] score_sum = [] for (i, s) in id_to_score.items(): unique_ids.append(i) score_sum.append(s) print(unique_ids) # [1, 2, 3] print(score_sum) # [60, 20, 40]
Cela peut vous aider.
# Solution 1 import pandas as pd ids=[1,2,1,1,3,1] scores=[10,20,10,30,40,10] df = pd.DataFrame(list(zip(ids, scores)), columns=['ids', 'scores']) print(df.groupby('ids').sum()) #### Output #### scores ids 1 60 2 20 3 40 # Solution 2 from itertools import groupby zipped_list = list(zip(ids, scores)) print([[k, sum(v for _, v in g)] for k, g in groupby(sorted(zipped_list), key = lambda x: x[0])]) #### Output #### [[1, 60], [2, 20], [3, 40]]
avec uniquement des outils Python intégrés, je ferais cette tâche à suivre de la manière suivante: sortie: p> ci-dessus code juste < Code> Imprimer CODE> Résultat, mais il peut être facilement modifié pour résulter dans ou autre structure de données. N'oubliez pas que cette méthode nécessite une passe séparée pour chaque identifiant unique, il peut donc être plus lent que d'autres approches. Quoi qu'il en soit ou non, cela dépend de la taille de vos données. P> P> dict code>: p>
Pour les listes simples et aucune bibliothèque 3ème partie, vos options sont essentiellement triées +
itheroTools.groupby Construire> ou construisez un dictionnaire avec vos clés.