4

週の列をその週が属する適切な月に変換する新しい列を追加しようとしています。1 週間が 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 の一部であり、201305 週は jan13 と feb13 の一部ですが。ちなみに、私が使用している週の形式は yyyyww です。その特定の週の最後の日を計算して、その月が何であるかを計算できればと思います。しかし、どうすればこれを最も簡単な方法で行うことができますか。@アルコ

4

1 に答える 1

4

考えられる方法は、この最後の曜日を日時に変換してから、その月にアクセスすることです。

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

マイナス 1 は、Python がゼロからカウントを開始するため ( 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
于 2014-01-07T14:13:18.650 に答える