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 Réponses :
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. à 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
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
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 code>)
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
Pourquoi le
total gagné code> 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?