How to Convert Pandas Index Name to Month

I am trying to change the date index in the following time series to the name of the month.

website = dfFinal.groupby(['Date','Website'])

websiteGroup = website['Visits'].aggregate(np.sum).unstack()

Website              A        B          C
Date                                      
2015-01-01       18185   805769        NaN
2015-02-01       73236   944458        NaN
2015-03-01      101737  1003966        NaN
2015-04-01      101018   861229        NaN
2015-05-01       77724   845223        NaN
2015-06-01      111503   966043        NaN
2015-07-01      115413   937184        NaN
2015-08-01      115215   890457       1649

For example, I want it to look like this:

    Website           A        B          C
    Date                                      
    January       18185   805769        NaN
    February      73236   944458        NaN
    March        101737  1003966        NaN
    April        101018   861229        NaN
    May           77724   845223        NaN
    June         111503   966043        NaN
    July         115413   937184        NaN
    August       115215   890457       1649

I want this to be possible, so my conspiracy ticks will be the name of the month instead of the date and time.

thanks

change //

the same scenario, but the solution does not work on it:

systemType = dfFinal.groupby(['Date','Website','Type'])
systemGroup = systemType['Visits'].aggregate(np.sum)
systemGroup = systemGroup.groupby(level=[0,1]).apply(lambda x: 100*x/float(x.sum())).unstack()

Type                      Other  Windows Mobile  Windows PC  
Date       Website                                           
2015-01-01 A           0.637888        0.005499   48.814957  
           B           0.686549        0.016506   54.176073  
2015-02-01 A           0.742804        0.020482   49.811568  
           B           0.651802        0.014506   57.014288  
2015-03-01 A           0.668390        0.014744   50.087972  
           B           0.573924        0.015937   59.906013  
2015-04-01 A           0.662258        0.015839   49.310024  
           B           0.583933        0.013469   59.490449  
2015-05-01 A           0.666461        0.020586   48.522979  
           B           0.577954        0.017983   58.838200  


systemGroup = systemGroup.rename(index=lambda x: x.strftime('%B'))

gives me an error

AttributeError: 'str' object has no attribute 'strftime'
+5
source share
4 answers

If you have a DatetimeIndex, you can use

websiteGroup.rename(index=lambda x: x.strftime('%B'))

.renamecan take a function, and we will use the code '%B'for the full name of the month.

+4
source

Use : DatetimeIndex.strftime

websiteGroup.index = websiteGroup.index.strftime('%B')
print (websiteGroup)
               A        B       C
January    18185   805769     NaN
February   73236   944458     NaN
March     101737  1003966     NaN
April     101018   861229     NaN
May        77724   845223     NaN
June      111503   966043     NaN
July      115413   937184     NaN
August    115215   890457  1649.0

df = websiteGroup.set_index(websiteGroup.index.strftime('%b'))
print (df)
          A        B       C
Jan   18185   805769     NaN
Feb   73236   944458     NaN
Mar  101737  1003966     NaN
Apr  101018   861229     NaN
May   77724   845223     NaN
Jun  111503   966043     NaN
Jul  115413   937184     NaN
Aug  115215   890457  1649.0

set_index:

df = websiteGroup.set_index(websiteGroup.index.strftime('%B'))
print (df)
               A        B       C
January    18185   805769     NaN
February   73236   944458     NaN
March     101737  1003966     NaN
April     101018   861229     NaN
May        77724   845223     NaN
June      111503   966043     NaN
July      115413   937184     NaN
August    115215   890457  1649.0

:

pandas 0.23.0 DatetimeIndex.month_name:

websiteGroup.index = websiteGroup.index.month_name()
print (websiteGroup)
               A        B       C
Website                          
January    18185   805769     NaN
February   73236   944458     NaN
March     101737  1003966     NaN
April     101018   861229     NaN
May        77724   845223     NaN
June      111503   966043     NaN
July      115413   937184     NaN
August    115215   890457  1649.0
+1

datetime.strptime datetime.strftime('%B'):

>>> d = datetime.datetime.strptime('2015-01-01', '%Y-%m-%d')
>>> d.strftime('%B')
'January'
0

Pandas 0.23.0 ( 0.24.2) : .month_name. :

pandas.DatetimeIndex.month_name DateTimeIndex .

DataFrame:

aapl.tail()
# returns:
Attributes  High    Low Open    Close   Volume  Adj Close
2019-03-27  189.76  186.55  188.75  188.47  29848400.0  188.47
2019-03-28  189.56  187.53  188.95  188.72  20780400.0  188.72
2019-03-29  190.08  188.54  189.83  189.95  23564000.0  189.95
2019-03-30  190.08  188.54  189.83  189.95  23564000.0  189.95
2019-03-31  190.08  188.54  189.83  189.95  23564000.0  189.95

DataFrame DateTimeIndex, .month_name :

aapl.index = aapl.index.month_name()
aapl.tail()
# returns:
Attributes  High    Low Open    Close   Volume  Adj Close
March   189.76  186.55  188.75  188.47  29848400.0  188.47
March   189.56  187.53  188.95  188.72  20780400.0  188.72
March   190.08  188.54  189.83  189.95  23564000.0  189.95
March   190.08  188.54  189.83  189.95  23564000.0  189.95
March   190.08  188.54  189.83  189.95  23564000.0  189.95

0.23.0 .month() , .strftime('%B').

0

Source: https://habr.com/ru/post/1608346/


All Articles