Ice*_*lin 4 python python-datetime pandas
我正在尝试添加一个新列,将周列转换为该周所属的适当月份。如果一周分为 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
Run Code Online (Sandbox Code Playgroud)
所以输出看起来像这样。有任何想法吗?
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
Run Code Online (Sandbox Code Playgroud)
尽管 201301 周是 12 月 12 日和 1 月 13 日的一部分,并且 201305 周是 13 月 13 日和 2 月 13 日的一部分。顺便说一句,我使用的周格式是 yyyyww。我想我是否可以计算出该周的最后一天以及该月是多少。但我怎样才能以最简单的方式做到这一点。@alko
一种可能的方法是将一周的最后一天转换为日期时间,然后访问该月份:
df['LastDayWeek'] = pd.to_datetime((df['Week']-1).astype(str) + "6", format="%Y%U%w")
Run Code Online (Sandbox Code Playgroud)
减一是因为 python 从零开始计数(http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior),即+ "6"每周的最后一天。
然后你可以得到这些天的月份:
df['MonthMax'] = pd.DatetimeIndex(df['LastDayWeek']).month
Run Code Online (Sandbox Code Playgroud)
给出:
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
Run Code Online (Sandbox Code Playgroud)