【问题标题】:python dataframe convert week number to monthpython数据框将周数转换为月
【发布时间】:2014-01-07 13:32:38
【问题描述】:

我正在尝试添加一个新列,将周列转换为该周所属的适当月份。如果将一周分为 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。我想如果我可以计算那个特定周的最后一天,那么这个月是什么。但我怎样才能以最简单的方式做到这一点。 @alko

【问题讨论】:

    标签: python pandas python-datetime


    【解决方案1】:

    一种可能的方法是将一周的最后一天转换为日期时间,然后访问该月的月份:

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

    减一是因为 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
    

    【讨论】:

    • 但是,他们在@cyborg 所指的答案中注意到了一些极端情况。
    • 很抱歉很痛苦,但你知道我如何在月份中包含前导 0,即我需要至少 2 位数字,即 01。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 2013-05-02
    • 2023-03-08
    • 2017-10-19
    相关资源
    最近更新 更多