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

基于首次超120天时间间隔限制数据集行的方法咨询

解决方案:按Ticket分组过滤Timelag超标的行

针对你提出的按ticket分组、根据timelag值过滤行的需求,我们可以用Python的pandas库来轻松实现。首先假设你的数据已经按ticket和date排序(如果没有的话,第一步先做排序),然后按照你的规则自定义分组过滤逻辑。

步骤1:准备数据(或读取你的数据集)

首先我们把你给出的示例数据转换成pandas DataFrame,同时做必要的格式处理:

import pandas as pd

# 示例数据集
data = pd.DataFrame({
    'ticket': [1,1,1,2,2,2,3,3,3,3,3,3],
    'date': ['2009-01-01','2010-01-01','2010-02-02','2010-02-02','2010-02-03','2010-02-04','2009-01-01','2009-01-02','2009-01-03','2009-08-06','2009-08-07','2010-02-01'],
    'timelag': [1,360,30,2,1,1,3,1,1,130,1,140]
})
# 将date列转为日期格式(方便后续排序,若你的数据已经是日期类型可跳过)
data['date'] = pd.to_datetime(data['date'])
# 确保数据按ticket和date升序排序(如果你的数据已经有序可跳过)
data = data.sort_values(['ticket', 'date']).reset_index(drop=True)

步骤2:定义自定义过滤函数

根据你给出的三条规则,我们需要一个分组函数来处理每个ticket组:

  • 若组内所有timelag都≤120,保留全部行;
  • 若第一个timelag>120的行是组内第2行,保留该行及之前的所有行;
  • 若第一个timelag>120的行是组内第n行(n>2),保留该行之前的所有行。

对应的函数如下:

def filter_ticket_group(group):
    # 找到组内所有timelag超过120的行
    over_threshold = group[group['timelag'] > 120]
    
    if over_threshold.empty:
        # 没有超过阈值的行,返回整个组
        return group
    else:
        # 获取第一个超阈值行在组内的位置(从1开始计数)
        first_over_position = group.index.get_loc(over_threshold.index[0]) + 1
        
        if first_over_position == 2:
            # 保留到第一个超阈值行(包含该行)
            return group.iloc[:first_over_position]
        else:
            # 保留第一个超阈值行之前的所有行(不包含该行)
            return group.iloc[:first_over_position - 1]

步骤3:应用分组过滤

使用groupby和apply将函数应用到每个ticket组:

filtered_data = data.groupby('ticket', group_keys=False).apply(filter_ticket_group)

验证结果

执行上述代码后,filtered_data的结果完全符合你的规则:

  • ticket 1:保留前2行,丢弃第3行;
  • ticket 2:保留全部3行;
  • ticket 3:保留前3行,丢弃第4-6行。

你可以通过print(filtered_data)查看最终的过滤结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:22:39