2014-01-07 4 views
3

Я пытаюсь добавить новый столбец, который преобразует столбец недели, чтобы быть подходящим месяцем, в который входит неделя. Если неделя разделить на 2 месяца, то возьмите максимальный месяц в качестве ответа.python dataframe конвертировать неделю число в месяц

import pandas as pd 

data = {'Week': [201301, 201301, 201302, 201302, 201303], 
'product': ['coke', 'fanta', 'coke' ,'sprite' ,'pepsi'], 
'quantity': [1.5, 1.7, 3.6, 2.4, 2.9]} 
df = pd.DataFrame(data) 

print df 
    Week product quantity 
0 201301 coke  1.5 
1 201301 fanta  1.7 
2 201302 coke  3.6 
3 201306 sprite  2.4 
4 201307 pepsi  2.9 

поэтому выход будет выглядеть следующим образом. есть идеи?

Week product  quantity MonthMax 
0 201301 coke  1.5  01 
1 201301 fanta  1.7  01 
2 201302 coke  3.6  01 
3 201305 sprite  2.4  02 
4 201306 pepsi  2.9  02 

даже если неделю 201301 является частью dec12 и jan13, а также неделю 201305 является частью jan13 и feb13. Формат недели, который я использую, кстати, равен yyyyww. Думаю, если бы я мог рассчитать последний день этой недели и, следовательно, месяц. но как я могу сделать это самым простым способом. @alko

ответ

3

Возможный способ преобразовать этот последний день недели до даты-времени, а затем получить доступ к месяцу, что:

df['LastDayWeek'] = pd.to_datetime((df['Week']-1).astype(str) + "6", format="%Y%U%w") 

минус один, так как питон начинает отсчет с нуля (http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior), + "6" должен иметь последний день каждой недели.
Тогда вы получите месяц эти дни с:

df['MonthMax'] = pd.DatetimeIndex(df['LastDayWeek']).month 

дает:

In [6]: df 
Out[6]: 
    Week product quantity   LastDayWeek MonthMax 
0 201301 coke  1.5 2013-01-05 00:00:00   1 
1 201302 fanta  1.7 2013-01-12 00:00:00   1 
2 201304 coke  3.6 2013-01-26 00:00:00   1 
3 201306 sprite  2.4 2013-02-09 00:00:00   2 
4 201308 pepsi  2.9 2013-02-23 00:00:00   2 
+0

Тем не менее, кажется, что крайние случаи отмечают в ответ @cyborg относится. – joris

+0

это большое спасибо. Я буду следить за любыми аномалиями. – IcemanBerlin

+0

Это была ссылка: http://stackoverflow.com/questions/304256/whats-the-best-way-to-find-the-inverse-of-datetime-isocalendar – joris

Смежные вопросы