当前位置: 首页 > news >正文

Python Pandas实现ABC_manage_channel逻辑

问题描述

我们需要确定"ABC_manage_channel"列的逻辑,该列的值在客户连续在同一渠道下单时更新为当前渠道,否则保留之前的值。具体规则如下:

  • 初始值为第一个订单的渠道
  • 如果客户连续两次在同一渠道下单,则更新为当前渠道
  • 否则保持前一个值不变

数据准备

首先创建orders表并插入测试数据:

CREATE OR REPLACE TABLE orders (customerid INTEGER,channel VARCHAR(20),order_date DATE
);INSERT INTO orders (customerid, channel, order_date) VALUES
(1, 'TMALL', '2024-11-01'),
(1, 'TMALL', '2024-11-02'),
(1, 'TMALL', '2024-11-03'),
(1, 'douyin', '2024-11-25'),
(1, 'JD', '2025-01-13'),
(1, 'JD', '2025-01-14'),
(1, 'douyin', '2025-03-02'),
(1, 'douyin', '2025-03-27'),
(3, 'JD', '2024-04-23'),
(4, 'JD', '2025-02-15'),
(5, 'JD', '2024-08-30'),
(6, 'douyin', '2024-10-05'),
(7, 'JD', '2024-05-29'),
(7, 'douyin', '2024-09-15'),
(7, 'Wholesale', '2024-12-22'),
(7, 'JD', '2025-03-19'),
(8, 'douyin', '2024-08-01'),
(8, 'douyin', '2024-08-07'),
(8, 'douyin', '2024-11-15'),
(9, 'JD', '2025-03-19'),
(10, 'douyin', '2024-07-30'),
(10, 'douyin', '2024-12-27'),
(10, 'douyin', '2025-03-21'),
(10, 'douyin', '2025-03-23');

解决方案

要解决这个问题,我们需要为每个客户的订单生成一个名为“ABC_manage_channel”的列,其值根据客户是否连续在同一渠道下单来更新。具体规则如下:

  • 初始值为第一个订单的渠道。
  • 如果客户连续两次在同一渠道下单,则更新为当前渠道。
  • 否则保持前一个值不变。

方法思路

  1. 数据准备:读取并预处理数据,确保订单按日期排序。
  2. 分组处理:按客户分组,对每个客户的订单进行处理。
  3. 逻辑实现:遍历每个客户的订单,初始化第一个订单的值为其渠道。对于后续订单,如果当前渠道与前一个订单相同,则更新为当前渠道,否则保持前一个值。

解决代码

import pandas as pd# 创建DataFrame
orders = pd.DataFrame({'customerid': [1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, 7, 7, 7, 7, 8, 8, 8, 9, 10, 10, 10, 10],'channel': ['TMALL', 'TMALL', 'TMALL', 'douyin', 'JD', 'JD', 'douyin', 'douyin', 'JD', 'JD', 'JD', 'douyin', 'JD', 'douyin', 'Wholesale', 'JD', 'douyin', 'douyin', 'douyin', 'JD', 'douyin', 'douyin', 'douyin', 'douyin'],'order_date': ['2024-11-01', '2024-11-02', '2024-11-03', '2024-11-25', '2025-01-13', '2025-01-14', '2025-03-02', '2025-03-27', '2024-04-23', '2025-02-15', '2024-08-30', '2024-10-05', '2024-05-29', '2024-09-15', '2024-12-22', '2025-03-19', '2024-08-01', '2024-08-07', '2024-11-15', '2025-03-19', '2024-07-30', '2024-12-27', '2025-03-21', '2025-03-23']
})# 转换日期格式
orders['order_date'] = pd.to_datetime(orders['order_date'])def compute_abc(group):# 按日期排序group = group.sort_values('order_date')abc = []prev_channel = Noneprev_abc = Nonefor idx, row in group.iterrows():if len(abc) == 0:# 第一个订单current_abc = row['channel']prev_channel = row['channel']prev_abc = current_abcabc.append(current_abc)else:current_channel = row['channel']if current_channel == prev_channel:current_abc = current_channelelse:current_abc = prev_abcabc.append(current_abc)prev_channel = current_channelprev_abc = current_abcgroup['ABC_manage_channel'] = abcreturn group# 应用处理函数
result = orders.groupby('customerid', group_keys=False).apply(compute_abc)print(result)

代码解释

  1. 数据准备:使用Pandas创建DataFrame,并将订单日期转换为日期类型。
  2. 处理函数compute_abc
    • 对每个客户的订单按日期排序。
    • 遍历每个订单,第一个订单的初始值为其渠道。
    • 后续订单判断当前渠道是否与前一个相同,相同则更新,否则保持前一个值。
  3. 分组应用:按客户分组应用处理函数,生成最终结果。

相关文章:

  • JAVAEE初阶01
  • 【C语言】柔性数组
  • SEO新手快速上手核心步骤
  • 解释型语言和编译型语言
  • 部署yolo到k230教程
  • DataStreamAPI实践原理——计算模型
  • 类的高级特性与语法细节
  • 线程池(五):线程池使用场景问题
  • Qt软件开发-摄像头检测使用软件V1.1
  • Redis和MQ的区别
  • SMT贴片加工费控制与优化实践指南
  • 基于大模型的急性肠套叠全流程预测与诊疗方案研究报告
  • JVM考古现场(二十六):执剑人·降维打击的终极审判
  • puppeteer注入浏览器指纹过CDP
  • PyTabKit:比sklearn更强大的表格数据机器学习框架
  • 2025.04.26-淘天春招笔试题-第一题
  • C#进阶学习(十四)反射的概念以及关键类Type
  • C#中的弱引用使用
  • 深入详解人工智能数学基础——微积分中拉格朗日乘数法在GAN训练中的应用
  • (23)VTK C++开发示例 --- 读取所有的PolyData类型示例
  • 大家聊中国式现代化|邓智团:践行人民城市理念,开创人民城市建设新局面
  • 铜钴巨头洛阳钼业一季度净利润同比大增九成,最新宣布超30亿元收购黄金资产
  • 2025全国知识产权宣传周:用AI生成的图片要小心什么?
  • 两部门:推动“青年驿站”为毕业生跨地区求职提供住宿优惠便利
  • AI翻译技术已走向大规模商用,应用场景覆盖多个关键领域
  • 推进“即买即退”服务试点,上海静安离境退税商店近400家居全市首位