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
3 Réponses :
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)]
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.
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.
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).
>>> list(map(tuple, temporary[['date', 'money_cum']].values)) [('2018-01-01', 20), ('2018-01-05', 65), ('2018-02-15', 72), ('2019-03-17', 222)]
Donc, fondamentalement, j'ai eu la même réponse que BramV à l'exception de la dernière conversion en liste de tuples ...
Veuillez ajouter la sortie attendue afin d'obtenir de meilleures réponses.