关于ZAKER 融媒体解决方案 合作 加入

python dataframe 将周数转换为月

CocoaChina 2019-11-23

我正在尝试添加一个新列 , 以将周列转换为该周所属的适当月份 . 如果一周分为两个月 , 则以最大月份为答案 .

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 quantity0 201301 coke 1.51 201301 fanta 1.72 201302 coke 3.63 201306 sprite 2.44 201307 pepsi 2.9

所以输出看起来像这样有任何想法吗?

Week product quantity MonthMax0 201301 coke 1.5 011 201301 fanta 1.7 012 201302 coke 3.6 01 3 201305 sprite 2.4 024 201306 pepsi 2.9 02

即使 201301 周是 dec12 和 jan13 的一部分 , 而 201305 周也是 jan13 和 feb13 的一部分 . 顺便说一句 , 我正在使用的星期格式是 yyyyww. 我想我是否可以算出该周的最后一天 , 从而算出该月是几月 . 但是我怎么能以最简单的方式做到这一点 . @alko

最佳答案

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

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 ] : dfOut [ 6 ] : Week product quantity LastDayWeek MonthMax0 201301 coke 1.5 2013-01-05 00:00:00 11 201302 fanta 1.7 2013-01-12 00:00:00 12 201304 coke 3.6 2013-01-26 00:00:00 13 201306 sprite 2.4 2013-02-09 00:00:00 24 201308 pepsi 2.9 2013-02-23 00:00:00 2

以上内容由"CocoaChina"上传发布 查看原文
相关标签 python

觉得文章不错,微信扫描分享好友

扫码分享