Consider a csv file:
string,date,number
a string,2/5/11 9:16am,1.0
a string,3/5/11 10:44pm,2.0
a string,4/22/11 12:07pm,3.0
a string,4/22/11 12:10pm,4.0
a string,4/29/11 11:59am,1.0
a string,5/2/11 1:41pm,2.0
a string,5/2/11 2:02pm,3.0
a string,5/2/11 2:56pm,4.0
a string,5/2/11 3:00pm,5.0
a string,5/2/14 3:02pm,6.0
a string,5/2/14 3:18pm,7.0
I can read this in, and reformat the date column into datetime format:
b=pd.read_csv('b.dat')
b['date']=pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p')
I have been trying to group the data by month. It seems like there should be an obvious way of accessing the month and grouping by that. But I can't seem to do it. Does anyone know how?
What I am currently trying is re-indexing by the date:
b.index=b['date']
I can access the month like so:
b.index.month
However I can't seem to find a function to lump together by month.
(update: 2018)
Note that
pd.Timegrouper
is depreciated and will be removed. Use instead:Slightly alternative solution to @jpp's but outputting a
YearMonth
string:Managed to do it:
Or
One solution which avoids MultiIndex is to create a new
datetime
column setting day = 1. Then group by this column. Trivial example below.The subtle benefit of this solution is, unlike
pd.Grouper
, the grouper index is normalized to the beginning of each month rather than the end, and therefore you can easily extract groups viaget_group
:Calculating the last day of October is slightly more cumbersome.
pd.Grouper
, as of v0.23, does support aconvention
parameter, but this is only applicable for aPeriodIndex
grouper.