2015-09-21 3 views
4

Я пытаюсь изменить индекс даты в следующих временных рядах на имя месяца.Как преобразовать индекс Pandas в название месяца

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 

, например, я хочу, чтобы выглядеть следующим образом:

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 

Я хочу, чтобы иметь возможность это так мой участок тиков будет название месяца вместо даты и времени.

Благодаря

редактировать //

же сценарий, но решение не работает на нем:

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')) 

дает мне ошибку

AttributeError: 'str' object has no attribute 'strftime' 

ответ

4

Если у вас есть DatetimeIndex, вы можете использовать

.rename может выполнять функцию, и мы будем использовать код '%B' на месяц.

0

Вы можете разобрать каждую строку даты с datetime.strptime и напечатать название месяца с datetime.strftime('%B'):

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

Используйте 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 
Смежные вопросы