如何将周转换为月数和总和值

时间:2018-04-19 07:02:11

标签: python pandas

我有一个数据集如下

指数Sku周销售

0 SKU1442 201420 1904.0

1 SKU1442 201421 692.0

2 SKU1442 201422 842.0

3 SKU1442 201423 1013.0

4 SKU1442 201424 362.0

5 SKU1442 201425 279.0

6 SKU1442 201426 430.0

7 SKU1442 201427 861.0

8 SKU1442 201428 1069.0

9 SKU1442 201429 721.0

我试图根据年份和周数来总结几个月的销售额。例如201406-> 9999,201407-> 100

到目前为止,我已经能够使用函数as将

转换为星期
dt = datetime.strptime('201420'+ '1', '%Y%W%w')

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为首先需要to_datetime,然后需要resample并汇总sum

df['Week'] = pd.to_datetime(df['Week'].astype(str) + '1', format='%Y%W%w')

df = df.resample('M', on='Week').sum()
print (df)
             Sales
Week              
2014-05-31  2596.0
2014-06-30  2926.0
2014-07-31  2651.0

替代解决方案由to_period转换为month期:

df = df.groupby(df['Week'].dt.to_period('m')).sum()
print (df)
          Sales
Week           
2014-05  2596.0
2014-06  2926.0
2014-07  2651.0

编辑:为了更好的样本,更改了ISku列中的输入数据:

print (df)
      ISku    Week   Sales
0  SKU1442  201420  1904.0
1  SKU1442  201421   692.0
2  SKU1442  201422   842.0
3  SKU1442  201423  1013.0
4  SKU1444  201424   362.0
5  SKU1444  201425   279.0
6  SKU1444  201426   430.0
7  SKU1444  201427   861.0
8  SKU1444  201428  1069.0
9  SKU1442  201429   721.0

df['Week'] = pd.to_datetime(df['Week'].astype(str) + '1', format='%Y%W%w')

df = df.groupby(['ISku',df['Week'].dt.to_period('m')]).sum().reset_index()
print (df)
      ISku    Week   Sales
0  SKU1442 2014-05  2596.0
1  SKU1442 2014-06  1855.0
2  SKU1442 2014-07   721.0
3  SKU1444 2014-06  1071.0
4  SKU1444 2014-07  1930.0