1
votes

Somme cumulée sur plusieurs jours en python

J'ai le dataframe suivant:

graph_df.date = pd.to_datetime(graph_df.date)
temporary = graph_df.groupby('date').money.sum()
temporary = temporary.groupby(temporary.index.to_period('date')).cumsum().reset_index()

Et j'ai besoin de:

[(2018-01-01,20),(2018-01-05,65),(2018-02-15,72),...,(2019-03-17,572)]

Je dois donc faire une somme d'argent cumulative sur tous les jours: Jusqu'à présent, j'ai essayé beaucoup de choses et le plus proche que je pense que j'ai est:

        date      money
0     2018-01-01     20
1     2018-01-05     30
2     2018-02-15     7
3     2019-03-17     150
4     2018-01-05     15
...
2530  2019-03-17     350

Mais cela me donne ValueError: fréquence invalide: date

pourrait quelqu'un aide s'il vous plaît?

Merci


1 commentaires

Veuillez ajouter la sortie attendue afin d'obtenir de meilleures réponses.


3 Réponses :


0
votes

vous pouvez essayer d'utiliser df.groupby ('date'). sum () :

exemple de bloc de données:

df
         date  money
0  01/01/2018     20
1  05/01/2018     30
2  15/02/2018      7
3  17/03/2019    150
4  05/01/2018     15
5  17/03/2019    550
6  15/02/2018     13



df['cumsum'] = df.money.cumsum()
list(zip(df.groupby('date').tail(1)['date'], df.groupby('date').tail(1)['cumsum']))

[('01/01/2018', 20),
 ('05/01/2018', 222),
 ('17/03/2019', 772),
 ('15/02/2018', 785)]


4 commentaires

Merci, mais je n'ai besoin de chaque rendez-vous qu'une seule fois. Le fait est que j'ai des dates et des intérêts gagnés attendus. Et je trace un graphique de l'intérêt projeté pour cela.


donc vous avez juste besoin de groupby et sum ()


@ DominikNovotný, c'est ce que vous vouliez? je mets à jour la réponse


Malheureusement, ce n'est pas non plus ce dont j'ai besoin. J'ai besoin que la colonne d'argent continue à s'additionner, donc la dernière ligne avec la date la plus élevée a la plus grande valeur en colonne d'argent.



2
votes

Je ne pense pas que vous ayez besoin du deuxième groupe. Vous pouvez simplement ajouter une colonne avec la somme cumulée.

Cela fait l'affaire pour moi:

import pandas as pd
df = pd.DataFrame({'date': ['01-01-2019','04-06-2019', '07-06-2019'], 'money': [12,15,19]})
df['date'] = pd.to_datetime(df['date']) # this is not strictly needed

tmp = df.groupby('date')['money'].sum().reset_index()
tmp['money_sum'] = tmp['money'].cumsum()

La conversion de la colonne de date en date réelle n'est pas nécessaire pour cela en travail.


2 commentaires

Celui-ci fait exactement ce que je veux. Merci beaucoup!


@Dominik Novotný alors vous devriez accepter sa réponse (et voter si vous le souhaitez).



1
votes
>>> list(map(tuple, temporary[['date', 'money_cum']].values))
[('2018-01-01', 20),
 ('2018-01-05', 65),
 ('2018-02-15', 72),
 ('2019-03-17', 222)]

1 commentaires

Donc, fondamentalement, j'ai eu la même réponse que BramV à l'exception de la dernière conversion en liste de tuples ...