I'm trying to calculate sales ratio of retailer-sku across a period of weeks and then calculate the mean of retailer-sku across those weeks.
So far I've been able to calculate the sum of sales across weeks for sku's and then I have grouped the sales of retailer-sku across weeks.
Now I'm unable to find the way to calculate the ratio of sales across 'N' number of weeks of retailer sku.
Here is my code
score_period = [
[201636, 201643],
[201640, 201647],
[201645, 201652],
[201649, 201704],
[201701, 201708]
]
sku_group = df.groupby('Sku', as_index=False)
sku_list = sku_group.groups.keys()
for sku in sku_list:
df_sku = df[df['Sku'] == sku]
for period in score_period:
df_period = df_sku[(df_sku['Week'] >= period[0]) &
(df_sku['Week'] <= period[1])]
# sales of each week in period
df_sum = df_period.groupby(['Week'], as_index=False)['WeekSales'].sum()
# retailer sales sum per week
sums = df_period.groupby(['Week', 'RetailerCode'], as_index=False)['WeekSales'].sum()
for index, rows in sums.iterrows():
sums['ratio'] = sums['WeekSales'] / df_sum[(df_sum['Week'])]['WeekSales']
Data
sales = [
{'RetailerCode': 'RET001', 'Sku': 'SKU001', 'Week': 201636, 'WeekSales': 10},
{'RetailerCode': 'RET002', 'Sku': 'SKU002', 'Week': 201636, 'WeekSales': 20},
{'RetailerCode': 'RET003', 'Sku': 'SKU003', 'Week': 201636, 'WeekSales': 0},
{'RetailerCode': 'RET004', 'Sku': 'SKU004', 'Week': 201636, 'WeekSales': 10},
{'RetailerCode': 'RET001', 'Sku': 'SKU001', 'Week': 201637, 'WeekSales': 5},
{'RetailerCode': 'RET002', 'Sku': 'SKU002', 'Week': 201637, 'WeekSales': 10},
{'RetailerCode': 'RET003', 'Sku': 'SKU003', 'Week': 201637, 'WeekSales': 20},
{'RetailerCode': 'RET004', 'Sku': 'SKU004', 'Week': 201637, 'WeekSales': 3},
]
df = pd.DataFrame(sales)
Expected results:
RET001 avg ratio = (Ratio of first week + Ratio of second week) / 2
RET002 avg ratio = (Ratio of first week + Ratio of second week) / 2