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

Pandas分组后基于条件依次比较Sequence值生成GroupID的实现优化

解决动态切换基准值的GroupID分配问题

你的问题核心在于原代码始终锚定分组的首个Sequence值作为比较基准,没有在GroupID递增后更新基准值。要实现需求,我们需要对每个客户分组逐行遍历处理,动态维护当前的基准值和GroupID状态。

关键思路

  1. 先把Sequence列转为数值类型(原数据是字符串格式,无法直接计算差值)
  2. 为每个客户分组单独写处理逻辑:
    • 初始基准设为分组第一个Sequence值,GroupID从1开始
    • 逐行对比当前Sequence与基准值的差值:若差值>0.5,则GroupID加1,同时把基准值更新为当前触发递增的Sequence
    • 若差值≤0.5,保持当前GroupID和基准值不变
  3. 将处理逻辑应用到所有客户分组,合并得到最终结果

修改后的完整代码

import pandas as pd

# 原始数据
data = [['Bob','25'],['Alice','46'],['Alice','47'],['Charlie','19'], ['Charlie','19'],['Charlie','19'],['Doug','23'],['Doug','35'],['Doug','35.5']]
df = pd.DataFrame(data, columns = ['Customer','Sequence'])

def assign_group_ids(group):
    # 转换Sequence为数值类型,确保差值计算合法
    group['Sequence'] = pd.to_numeric(group['Sequence'])
    group_ids = []
    current_group = 1
    # 初始化基准值为分组的第一个Sequence
    current_base = group['Sequence'].iloc[0]
    
    for seq in group['Sequence']:
        # 判断当前值与基准值的差值是否超过阈值
        if abs(seq - current_base) > 0.5:
            current_group += 1
            # 更新基准值为当前触发分组变更的Sequence
            current_base = seq
        group_ids.append(current_group)
    
    group['GroupID'] = group_ids
    return group

# 对每个客户分组应用处理逻辑,重置索引保证结果整洁
df_result = df.groupby('Customer', group_keys=False).apply(assign_group_ids).reset_index(drop=True)

print(df_result)

输出结果

Customer  Sequence  GroupID
0        Bob      25.0        1
1      Alice      46.0        1
2      Alice      47.0        2
3    Charlie      19.0        1
4    Charlie      19.0        1
5    Charlie      19.0        1
6       Doug      23.0        1
7       Doug      35.0        2
8       Doug      35.5        2

原代码失效原因

原代码的逻辑是始终基于分组首个Sequence计算差值,再用cumsum累加超过阈值的次数。对于Doug的情况:

  • 35与23的差值12>0.5,cumsum加1,GroupID变为2
  • 35.5与23的差值12.5>0.5,cumsum再加1,GroupID变为3
    但实际需求是35.5只需要和前一个基准值35对比(差值0.5≤0.5),所以GroupID应该保持2——这就是动态更新基准值的必要性。

内容的提问来源于stack exchange,提问作者n8-da-gr8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:32:32