0
votes

Opération similaire au groupe par listes

J'ai des listes d'identifiants et de partitions: xxx

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.

Donc, comme la sortie que j'attends: xxx

J'utilise le code suivant, mais cela ne fonctionne pas bien pour tous les cas: xxx


1 commentaires

Pour les listes simples et aucune bibliothèque 3ème partie, vos options sont essentiellement triées + itheroTools.groupby ou construisez un dictionnaire avec vos clés.


6 Réponses :


1
votes

Vous pouvez créer un dictionnaire à l'aide d'IDs et scores avec la touche comme éléments de ID et valeurs comme la liste des éléments correspondant à un Élément dans ID , vous pouvez résumer les valeurs et obtenir votre nouveau ID et scores Liste xxx < p> La sortie sera xxx


0 commentaires

0
votes

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 et Valeurs avec clés () et valeurs () provenant du dictionnaire: xxx


0 commentaires

0
votes

Tout simplement boucler à travers eux et ajouter si les identifiants correspondent.

[1, 2, 3]
[60, 20, 40]


0 commentaires

0
votes
# 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]

0 commentaires

0
votes

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]]


0 commentaires

0
votes

avec uniquement des outils Python intégrés, je ferais cette tâche à suivre de la manière suivante: xxx

sortie: xxx

ci-dessus code juste < Code> Imprimer Résultat, mais il peut être facilement modifié pour résulter dans dict : xxx

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.


0 commentaires