0

I need to group values by Year, from my dataset:

Date           Freq Year    Month
0   2020-03-19  32  2020    3
1   2020-03-25  31  2020    3
2   2020-03-23  28  2020    3
3   2020-03-04  26  2020    3
4   2020-08-04  26  2020    8
... ... ... ... ...
2516    2011-09-02  1   2011    9
2517    2013-04-25  1   2013    4
2518    2020-09-02  1   2020    9
2519    2013-09-03  1   2013    9
2520    2015-01-01  1   2015    1

The table below was found as follows:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month

try_this=pd.pivot_table(df, values = 'Freq', index=['Date','Year'], columns = 'Month')


            Month   1   2   3   4   5   6   7   8   9   10  11  12
Date        Year                                                
2010-03-04  2010    NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2010-03-07  2010    NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2010-07-31  2010    NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN
2010-10-07  2010    NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN NaN
2010-12-20  2010    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0
... ... ... ... ... ... ... ... ... ... ... ... ... ...
2020-12-05  2020    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 15.0
2020-12-06  2020    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 10.0
2020-12-08  2020    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 18.0
2020-12-09  2020    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 4.0
2020-12-10  2020    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 14.0

I am trying to get something like this:

Year    1 2 3 4 5 6 7 8 9 10 11 12

2020        ...                61.0      
2019        ...
2018        ...
...

i.e. a table where group by year the frequency through months. What I tried (code above) is not giving me this output. I would appreciated more help on how to figure it out.

References: Plot through time setting specific filtering How to pivot a dataframe in Pandas?

Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158

1 Answers1

0

Have you tried using aggfunc in pivot_table:

df = df[['Year', 'Month', 'Freq']]
df = df.pivot_table(values=['Freq'], columns=['Month'], index=['Year'], aggfunc='sum')
print(df)

      Freq                       
Month    1      3    4     8    9
Year                             
2011   NaN    NaN  NaN   NaN  1.0
2013   NaN    NaN  1.0   NaN  1.0
2015   1.0    NaN  NaN   NaN  NaN
2020   NaN  117.0  NaN  26.0  1.0
NYC Coder
  • 7,424
  • 2
  • 11
  • 24