Python数据处理 同一用户历史消费金额按照时间顺序,横向排列

该博客介绍了如何使用Python对用户消费记录数据进行处理,包括读取Excel数据、按旺旺号、订单号和时间排序,创建透视表展示历史购买记录。进一步通过循环计算消费金额增长率,为分析用户消费行为提供数据支持。
摘要由CSDN通过智能技术生成

目的

        已经获取到用户每次的下单商品金额,使用Python处理数据得到用户的历史购买记录出现在同一行,列名显示为(旺旺号、商品金额第1次、商品金额第二次、……)。

如图所示

具体操作步骤:

  1. 首先将数据读取进python
  2. 其次,按照旺旺号、订单号、金额进行分组,对付款时间排序
  3. 使用pivot_table()构建透视表,对列名重命名,并重置索引

具体实现方法:

1、将数据读取进python

data = pd.read_excel('新建 XLSX 工作表.xlsx',sheet_name= 'Sheet1')  #读取数据进入Python程序
print(data.head())

 2、按照旺旺号、订单号、金额进行分组,对付款时间排序

#首先对数据进行聚合处理,使得每个旺旺号+订单号+付款时间唯一
data1 = pd.pivot_table(data,values =['商品金额'],index =['旺旺号','订单号','付款时间'],
                      aggfunc = {'商品金额':sum}).reset_index(drop = False)
# print(data1.head())

# 先将时间字段,由字符串格式转为时间格式
data1['付款时间'] =data1['付款时间'].apply(lambda x:datetime.datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
# print(data1.head())

# 根据不同的旺旺号、订单号、金额,对付款时间进行排序
data1['ranks'] = data1.groupby(['旺旺号'])['付款时间'].rank().astype(int)

print(data1)

 3、使用pivot_table()构建透视表,对列名重命名,并重置索引

data2 = pd.pivot_table(data1,values=['商品金额'],index = ['旺旺号'],columns =['ranks'])
# print(data2.head())

"""这个透视表两层列名,第一层是金额,第二层是序列"""
data2.columns.tolist()  # 查看列名
data2.columns = [str(s1) +"第"+str(s2)+"次" for (s1,s2) in data2.columns.tolist()]  #对列名进行重命名
data2.reset_index(inplace =True)  #重置索引,然后拉平索引

此时实现了最初的界面效果。

进一步计算增长率

        然后我们可以利用这个数据,进一步的处理,计算消费金额的增长率,比如:第二次的变化:(第二次的消费金额/第一的消费金额 - 1);第三次的变化:(第三次的消费金额/第二的消费金额 - 1),……以此类推。

'''接下来使用循环计算增长率'''
for i in range(2,39):
    data2['第%s次变化' %(i)] = (data2['商品金额第%s次' % (str(i))] )/(data2['商品金额第%s次' % (str(i-1))]  ) -1
print(data2.head())

结果如图所示:

 这样,我们就现实了,同一用户历史消费金额按照时间顺序,横向排列的数据需求啦~~~~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值