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

如何识别连续3个月销售达标行并填充一致性列

解决方案:实现达标后重置的连续3个月销售额计数

问题分析

你之前用rolling(window=3).sum()的方法,只能计算固定窗口内的达标次数,但无法处理达标后重置计数器或者中途不达标直接重置的逻辑——这种带状态的逐行计算,需要自定义迭代逻辑来实现。

步骤1:构造示例数据

先模拟一个包含salesperson_id、Month、sales的DataFrame,方便测试:

import pandas as pd

data = {
    'salesperson_id': [1,1,1,1,1,1,1,2,2,2,2,2],
    'Month': ['2023-01','2023-02','2023-03','2023-04','2023-05','2023-06','2023-07','2023-01','2023-02','2023-03','2023-04','2023-05'],
    'sales': [260,270,280,260,240,290,300,250,250,240,260,270]
}
df = pd.DataFrame(data)

步骤2:自定义分组处理函数

写一个函数,对每个销售的行数据逐行处理,维护一个计数器:

  • 初始化计数器count = 0
  • 遍历每一行:
    • 如果当前销售额≥250:计数器+1;如果计数器达到3,标记获奖并重置计数器为0
    • 如果当前销售额<250:计数器重置为0,不标记获奖
  • 返回处理后的结果列
def calculate_consistency(group):
    # 初始化计数器和结果列表
    count = 0
    consistency = []
    for sale in group['sales']:
        if sale >= 250:
            count += 1
            # 达标3个月,标记获奖并重置计数器
            if count == 3:
                consistency.append('获奖')
                count = 0
            else:
                consistency.append(count)
        else:
            # 销售额不达标,重置计数器
            count = 0
            consistency.append(0)
    group['3 month consistency'] = consistency
    return group

步骤3:应用函数到分组数据

按salesperson_id分组后,应用上面的函数:

df = df.groupby('salesperson_id').apply(calculate_consistency).reset_index(drop=True)

结果验证

处理后的DataFrame会得到符合预期的3 month consistency列:

salesperson_idMonthsales3 month consistency
12023-012601
12023-022702
12023-03280获奖
12023-042601
12023-052400
12023-062901
12023-073002
22023-012501
22023-022502
22023-032400
22023-042601
22023-052702

这个结果完全符合你的规则:

  • 连续3个月达标时标记「获奖」,之后计数器重置
  • 任何一个月销售额低于250,计数器直接重置为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:52:17