我有一个数据集如下
指数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')
感谢任何帮助。
答案 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