2014-01-07 3 views
3

주 열을 변환하는 새 열을 추가하려고합니다. 주를 2 개월에 걸쳐 분할하면 최대 월을 답으로 취하십시오.파이썬 데이터 프레임 변환 주 번호 월

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 또한 주 201,305이 jan13 및 feb13의 일부의 일부 임에도 불구하고. 내가 사용하는 주 형식은 yyyyww입니다. 나는 그 특정 주간의 마지막 날과 그 달이 무엇인지 계산할 수 있을지 추측합니다. 그러나 어떻게 이것을 가장 쉬운 방법으로 할 수 있습니까? @alko

답변

3

가능한 방법은 날짜에 일주일의 마지막 날을 변환하고, 그 달에 액세스 할 수 있습니다 : 파이썬이 제로 (http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior)에서 카운트 시작하기 때문에

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

마이너스를, + "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