需求描述
- 在今天的数据需求,现在要统计各个场景下的类目种类数,并列出对应都有哪些类目。
- 现在面临的问题是:每个客户的应用场景不同,购买的类目也有多种。
🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞
数据形式
数据处理前:
最终统计的结果:
拆开来看,分两大块一部分是统计最适场景的类目数、一部分是统计最适场景的类目组合
解决思路:
1、首先将原始数据中用到的列提取出来,一行拆分为多行
2、对原始数据进行去重处理,得到最新的数据
- 统计最适场景的类目数
使用pandas中的pivot_table()。
- 统计最适场景的类目组合
将各个场景下的,类目进行拼接。
具体实现代码:
1、首先将原始数据中用到的列提取出来,一行拆分为多行
data2_1 =data2[['类目','最适场景']]
data2_1['类目1'] = data2_1['类目']
data2_1 = data2_1.drop(['类目1'], axis=1).join(data2_1['类目1'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('类目_new'))
print(data2_1.head())
2、便于后面的统计,对原始数据进行去重处理,得到最新的数据
data2_1 =data2_1[['最适场景','类目_new']]
data2_1.drop_duplicates(inplace =True) #对数据进行去重
- 统计最适场景的类目数
kind_1 =pd.pivot_table(data2_1,values =['类目_new'],index =['最适场景'],aggfunc ={ '类目_new':lambda x :len(x.dropna().unique())},fill_value =0).reset_index(drop=False).rename(columns ={'类目_new':'类目数'})
print(kind_1.head())
- 统计最适场景的类目组合
# 创建函数,用于聚合场景购买品类的集合
def fun_join(x):
return ','.join(x.values)
kind_2 =data2_1.groupby(by = '最适场景').agg(fun_join).reset_index().rename(columns ={'类目_new':'类目组合'}) #获得最近一次购买产品的组合
kind =pd.merge(kind_1,kind_2,on =['最适场景'],how ='inner')
print(kind.head())
至此,已经完成了这个数据需求。
总结一下:
在这个数据需求里面最重要的两点,一个是数据的拆分;一个是数据的合并。