You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas实现客户数据按日期连续规则分组

Pandas实现日期相邻分组方案

核心逻辑

  • 先对日期列做格式转换,保证可计算日期差
  • 按客户字段独立分组处理,保证不同客户的分组不互通
  • 对每个客户的日期排序后计算相邻行的日期差,差值超过1天时标记为新分组起点,累加标记值得到分组ID

完整可运行代码

import pandas as pd
from string import ascii_uppercase

# 1. 构造示例数据,你也可以替换为pd.read_xxx读取自己的数据源
data = [
    ["Customer A1", "1/1/2020"],
    ["Customer A1", "1/1/2020"],
    ["Customer A1", "2/1/2020"],
    ["Customer A1", "3/1/2020"],
    ["Customer A1", "3/1/2020"],
    ["Customer A1", "5/1/2020"],
    ["Customer A1", "10/1/2020"],
    ["Customer A1", "13/1/2020"],
    ["Customer A1", "14/1/2020"],
    ["Customer A1", "20/1/2020"],
    ["Customer B1", "21/1/2020"],
    ["Customer B1", "22/1/2020"],
    ["Customer B1", "24/1/2020"],
    ["Customer B1", "27/1/2020"],
    ["Customer B1", "28/1/2020"],
]
df = pd.DataFrame(data, columns=["customer", "date"])

# 2. 转换日期格式,适配日/月/年的输入格式
df["date"] = pd.to_datetime(df["date"], dayfirst=True)

# 3. 定义分组规则函数
def generate_group(customer_df):
    # 先按日期排序,保证顺序正确
    customer_df = customer_df.sort_values("date", ignore_index=True)
    # 计算相邻行的日期差,第一行空值填充为0
    date_diff = customer_df["date"].diff().dt.days.fillna(0)
    # 差值超过1天则触发新分组,累加得到数字分组ID
    group_num = (date_diff > 1).cumsum()
    # 转换为A/B/C的字母分组,不需要可以删掉直接用group_num
    customer_df["group"] = group_num.map(lambda x: ascii_uppercase[x])
    return customer_df

# 4. 按客户分组应用规则
df = df.groupby("customer", group_keys=False).apply(generate_group)

# 输出结果验证
print(df)

结果说明

运行后输出的group列和需求示例完全一致,不同客户的分组编号独立重置,日期差≤1天的记录都会被划分到同一个分组。


内容的提问来源于stack exchange,提问作者duyvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:03