Here the best is create dictionary:
df['Date'] = pd.to_datetime(df['Date'])
d = dict(tuple(df.groupby(df['Date'].dt.month)))
print (d)
{9: Col1 Col2 Date Val
1 13 78 2018-09-21 4, 10: Col1 Col2 Date Val
2 14 82 2018-10-28 5
4 17 35 2018-10-23 9, 11: Col1 Col2 Date Val
0 12 23 2018-11-20 4
3 15 22 2018-11-10 8}
print (d[9])
Col1 Col2 Date Val
1 13 78 2018-09-21 4
Or:
d = dict(tuple(df.groupby(df['Date'].dt.strftime('%b'))))
print (d)
{'Nov': Col1 Col2 Date Val
0 12 23 2018-11-20 4
3 15 22 2018-11-10 8, 'Oct': Col1 Col2 Date Val
2 14 82 2018-10-28 5
4 17 35 2018-10-23 9, 'Sep': Col1 Col2 Date Val
1 13 78 2018-09-21 4}
print (d['Nov'])
Col1 Col2 Date Val
0 12 23 2018-11-20 4
3 15 22 2018-11-10 8
It is not recommended, but possible create DataFrames by groups:
for i, g in df.groupby(df['Date'].dt.strftime('%b')):
globals()['df_' + str(i)] = g
print (df_Nov)
Col1 Col2 Date Val
0 12 23 2018-11-20 4
3 15 22 2018-11-10 8
If need aggregate by months:
df.groupby(df['Date'].dt.month).sum()
Or:
df.groupby(df['Date'].dt.strftime('%b')).sum()