0
votes

Comment grouper la liste imbriquée par premier élément de la liste imbriquée?

J'ai une liste de données avec nom, année, montant et résultat. Je veux calculer le total gagné et la perte totale de chaque année. (De préférence à l'aide de fonctions de la liste pour débutant) merci

​​J'ai essayé d'utiliser la dictionAY, mais cela semble ajouter beaucoup de complexité et montrer une erreur tout le temps. P>

Year    Total Won  Total Lost
2012    11.23      0
2013    10.22      12.62


3 commentaires

Pourquoi le total gagné pour 2012 égal à 0?


@ Hs-nébula Il n'y a pas de liste perdue pour 2012


Alors pourquoi n'y est-il pas 2 rangées pour 2013?


3 Réponses :


1
votes

Si vous êtes assez à l'aise avec l'utilisation de Pandas , vous pouvez citer un table pivot sur les données. Je suppose que la table résultante est ce que vous aviez l'intention de montrer. xxx pré>

à modifier nan code> à 0 code> p>

df2['net'] = df2.won - df2.lost
# result   lost    won    net
# year                       
# 2012     0.00  11.23  11.23
# 2013    12.62  10.22  -2.40


0 commentaires

1
votes

au lieu d'une compréhension du dictionnaire (votre approche), je suggérerais d'écrire du code. Cette solution fait ce que vous recherchez.

Year won     lost
2012 11.23  0
2013 10.22  12.62


2 commentaires

Depuis l'année 2012, vos valeurs gagnées et perdues doivent être inversées, sur la base de la production attendue de l'OP.


@ Hs-nébula mais ses résultats étaient erronés - ils ont été inversés. (voir my_list )



1
votes

En supposant que votre sortie attendue pour 2012 est une faute de frappe (et que vous vouliez montrer 11.23 comme le total gagné comme indiqué par votre jeu de données), vous pouvez utiliser itheroTools.groupby code> et somme code> résumer le total gagné / perdu par année. Vous pouvez modifier le format de sortie au besoin, mais cela devrait vous faire aller.

from itertools import groupby
from operator import itemgetter

results = [['a', '2013', '10.22', 'won'], ['b', '2012', '11.23', 'won'], ['c', '2013', '12.62', 'lost']]
for year, values in groupby(sorted(results, key=itemgetter(1)), key=itemgetter(1)):
    values = list(values)
    won = sum(float(v[2]) for v in values if v[3] == 'won')
    lost = sum(float(v[2]) for v in values if v[3] == 'lost')
    print(f'Year: {year} Total Won: {won} Total Lost: {lost}')

# Year: 2012 Total Won: 11.23 Total Lost: 0
# Year: 2013 Total Won: 10.22 Total Lost: 12.62


0 commentaires