温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python怎么解决新客人数、回购人数和总人数问题

发布时间:2022-04-25 10:58:06 来源:亿速云 阅读:247 作者:iii 栏目:大数据

今天小编给大家分享一下Python怎么解决新客人数、回购人数和总人数问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

读取流水


saleflow= pd.read_csv('流水.csv',index_col=0)

Python怎么解决新客人数、回购人数和总人数问题

筛选出合生元益生菌的流水


#处理字段 yyp_saleflow=saleflow[saleflow['cls']=='营养品'] yyp_saleflow=saleflow[saleflow['custype']=='vip'] ysj_saleflow = yyp_saleflow[yyp_saleflow['cls2']=='益生菌'] ysj_saleflow['pinpai'] =ysj_saleflow.apply(pinpai_class_new,axis=1) # print('益生菌流水数', ysj_saleflow.shape[0]) ysj_saleflow= ysj_saleflow[ysj_saleflow['pinpai']=='合生元'] # print('合生元益生菌流水数', ysj_saleflow.shape[0])

求每个会员第一次购买合生元益生菌的时间,从而筛选出某个季度的新客


# 会员第一次购买益生菌的时间ysj_first =ysj_saleflow.groupby(['shopid_cardid']).oper_date.min().reset_index().rename(columns={'oper_date':'oper_date_first'})ysj_first['oper_date_first']=pd.to_datetime(ysj_first['oper_date_first'])  # 各个季度的新客ysj_new_Q1= ysj_first[(ysj_first['oper_date_first'] < pd.to_datetime('2020-04-01 00:00:00'))&(ysj_first['oper_date_first'] > pd.to_datetime('2020-01-01 00:00:00'))]ysj_new_Q3=  ysj_first[(ysj_first['oper_date_first'] < pd.to_datetime('2019-10-01 00:00:00'))&(ysj_first['oper_date_first'] > pd.to_datetime('2019-07-01 00:00:00'))]ysj_new_Q4 = ysj_first[(ysj_first['oper_date_first'] < pd.to_datetime('2020-01-01 00:00:00'))&(ysj_first['oper_date_first'] > pd.to_datetime('2019-10-01 00:00:00'))]

比如 Q3的新客有

这样我们就有了各个季度的新客ID

再计算老客, 老客定义为第三季度和第二季度都买过合生元的会员,所有只用用第三季度的流水会员id和 第二季度的会员id  进行 inner join


ysj_saleflow2019=ysj_saleflow.query('year==2019')ysj_saleflow2019Q2_id=ysj_saleflow2019[ysj_saleflow2019.month.isin([4,5,6])][['shopid_cardid']]ysj_saleflow2019Q3_id=ysj_saleflow2019[ysj_saleflow2019.month.isin([7,8,9])][['shopid_cardid']]ysj_saleflow2019Q4_id=ysj_saleflow2019[ysj_saleflow2019.month.isin([10,11,12])][['shopid_cardid']]ysj_Q3_old_id= (ysj_saleflow2019Q2_id.merge(ysj_saleflow2019Q3_id)).drop_duplicates()

再计算 Q3 的新客有多少在Q4又购买了合生元益生菌, 即回购

思路是 拿Q4的会员id 与  Q3新客id inner join


#Q3 新客 在 年底回购人数Q3new_to_Q4 =(ysj_saleflow2019Q4_id.merge(ysj_new_Q3)).shopid_cardid.nunique()

最后计算人数,并创建dataframe


# 新客人数Q3_new=ysj_new_Q3.shopid_cardid.nunique()# Q3 益生菌总人数Q3_YSJ_total= ysj_saleflow2019Q3_id.shopid_cardid.nunique()# 老客人数ysj_Q3_old_id= (ysj_saleflow2019Q2_id.merge(ysj_saleflow2019Q3_id)).drop_duplicates()Q3_old=ysj_Q3_old_id.shopid_cardid.nunique()#.reset_index() # Q3 老客人数#Q3 新客 在 年底回购人数Q3new_to_Q4 =(ysj_saleflow2019Q4_id.merge(ysj_new_Q3)).shopid_cardid.nunique()## 创建dataframedata = {'Q3益生菌总会员人数': [Q3_YSJ_total],       'Q3新客人数': [Q3_new],       'Q3老客人数': [Q3_old],       'Q3新客在年底回购的人数':[Q3new_to_Q4] ,     'shopId':[shopId]       }frame = pd.DataFrame(data, columns = ['Q3益生菌总人数', 'Q3新客人数', 'Q3老客人数', 'Q3新客在年底回购的人数','shopId'])

Python怎么解决新客人数、回购人数和总人数问题

这里只计算了一个连锁,如果 计算多个连锁, 可以对 连锁列表进行循环

依次 df.append(). 具体做法是 在循环之前建立一个空的dataframe



df_empty =pd.DataFrame(columns=('Q3益生菌总会员人数','Q3新客人数','Q3老客人数','Q3新客在年底回购的人数','shopId'))

每循环一次 就让df_empty 新增一个连锁的数据,即


df_empty=df_empty.append(frame,ignore_index=True)

伪代码:


df_empty =pd.DataFrame(columns=('Q3益生菌总会员人数','Q3新客人数','Q3老客人数','Q3新客在年底回购的人数','shopId'))for  某一个连锁  in    连锁列表:       计算某个连锁,得到frame
      df_empty= df_empty.append(frame, ignore_index=True)

以上就是“Python怎么解决新客人数、回购人数和总人数问题”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI