1
votes

créer un nouveau dataframe après avoir additionné les valeurs par mois

J'ai une base de données contenant des transactions par jour sur une période de plusieurs années. Je voudrais convertir ce df en df_monthly où chaque ligne contient la somme des transactions d'un mois donné, arrangée du 1 (jan) 2019 au 2 (feb) 2020.

Supposons que ce soit mon df:

XXX

J'ai essayé ceci

    year    month   col1 col2
0   2019    1       14   180
1   2019    2       48    82
2   2020    1       56    48
3   2020    2        8     2

output:

               col1 col2
month   year        
1       2019    14  180
        2020    56  48
2       2019    48  82
        2020    8   2

Ce que je voudrais c'est ceci:

df['month'] = df.index.month
df['year'] = df.index.year
df_monthly = df.groupby(['month', 'year']).sum()
 

Avez-vous des suggestions?

merci!


1 commentaires

Je pense que changer le groupby en df.groupby (['month', 'year']). Sum () devrait fonctionner.


3 Réponses :


0
votes

'groupby' peut être utilisé.

df.groupby(['year','month']).agg(sum).reset_index()
   
    year    month   col1    col2
0   2019    1   14  180
1   2019    2   48  82
2   2020    1   56  48
3   2020    2   8   2


0 commentaires

0
votes

data = df_monthly.reset_index ()

print (data.sort_values ​​(by = ['year']))

   month  year  col1  col2
0      1  2019    14   180
2      2  2019    48    82
1      1  2020    56    48
3      2  2020     8     2


0 commentaires

0
votes

Effectuer un tri, réinitialiser l'index, réorganiser les colonnes:

   year  month  col1  col2
0  2019      1    14   180
1  2019      2    48    82
2  2020      1    56    48
3  2020      2     8     2

Retour:

import pandas as pd

df = pd.DataFrame([['2019-01-01', 11, 82],
                   ['2019--01-02', 3, 98],
                   ['2019-02-01', 1, 3],
                   ['2019-02-02', 47, 79],
                   ['2020-01-01', 56, 48],
                   ['2020-02-02', 8, 2]], columns=['date', 'col1', 'col2'])
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
# print(df)
df['month'] = df.index.month
df['year'] = df.index.year
df_monthly = df.groupby(['month', 'year']).sum()

df_monthly = df_monthly.sort_values(['year']).reset_index()
cols = df_monthly.columns.tolist()
# print(cols)
cols = [cols[1]] + [cols[0]] + cols[2:]
df_monthly = df_monthly[cols]
print(df_monthly)


0 commentaires