数据:
1,sales负责的展柜list;(4242条)
2,全部参加两项促销活动的展柜信息;(11309条)
3,公司的组织架构(22条)
需求:
1、汇总表-按照Sales/区域两个部分呈现商厦和展柜两个维度的进度促销覆盖进度;
2、明细表-商厦和展柜两个维度的具体促销活动是否覆盖的明细表;
要求:数据会每天更新【活动原始数据-每日更新】的数据源,请用excel函数搭建框架,要求保留所有公式,做到每日更新【活动原始数据-每日更新】即能立刻更新数据呈现新的进度展示;
汇总表
明细表
python代码
path = 'D:\python_data_file\OM面试数据处理题目.xlsx'
df1 = pd.read_excel(path,sheet_name='展柜list')
df2 = pd.read_excel(path,sheet_name='活动数据-每日更新')
df3 = pd.read_excel(path,sheet_name='组织架构')
df1.columns = ['商厦代码','展柜代码','Sales']
#四个指标的联合汇总
df4 = df1.merge(df3,on='Sales',how='outer')
df4.drop_duplicates(['商厦代码','展柜代码'],inplace=True)
a=[]
for i in df4.groupby(['区域','Sales'])['商厦代码'].unique():
a.append(len(list(i)))
b= df4.groupby(['区域','Sales']).count()['展柜代码'].reset_index()
b.columns = ['区域','Sales','展柜']
b['商厦'] = a
df4_2 = df2.merge(df4,on=['商厦代码','展柜代码'],how='inner')
df4_2.drop_duplicates(['商厦代码','展柜代码'],inplace=True)
c=[]
for i in df4_2.groupby(['区域','Sales'])['商厦代码'].unique():
c.append(len(list(i)))
d= df4_2.groupby(['区域','Sales']).count()['展柜代码'].reset_index()
d.columns = ['区域','Sales','展柜']
d['商厦'] = c
#汇总表
x = pd.DataFrame(index = d.groupby(['区域','Sales']).count().index)
x['商厦促销活动覆盖率'] = list(d['商厦']/b['商厦'])
x['展柜促销活动覆盖率'] = list(d['展柜']/b['展柜'])
#明细表
df4_2.groupby(['商厦代码','展柜代码'])['补贴类型'].count().apply(lambda x :x if x>=1 else '否').reset_index()
应该有其他简便方法,求大佬指点。
数据:https://pan.baidu.com/s/1MRWsunTlosZNIKsEQFPTEw 提取码:u39d
网友评论