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

Pandas按ID分组计算时间差并动态重置计数的实现问题

解决步骤

首先需要先将字符串格式的时间列转为Pandas支持的datetime类型,才能正常计算时间差:

import pandas as pd

# 转换Datetime列为时间类型,匹配你给出的时间格式
df1['Datetime'] = pd.to_datetime(df1['Datetime'], format='%d%b%Y %H:%M')

你需要的规则核心是动态更新基准时间,无法直接用内置transform实现,所以可以对每个ID分组后用自定义函数处理,逻辑是遍历每个ID的所有交易记录,跟踪当前的基准时间,符合条件就重置基准和计数:

def calc_count(group):
    # 先按时间排序,确保交易顺序正确
    group = group.sort_values('Datetime', ignore_index=True)
    # 初始化第一个记录的基准时间和计数
    base_time = group.loc[0, 'Datetime']
    count_list = [1]
    for idx in range(1, len(group)):
        # 计算当前记录和基准时间的分钟差
        diff_min = (group.loc[idx, 'Datetime'] - base_time).total_seconds() / 60
        if diff_min > 30:
            # 超过30分钟,重置基准和计数
            base_time = group.loc[idx, 'Datetime']
            count_list.append(1)
        else:
            # 未超过,计数加1
            count_list.append(count_list[-1] + 1)
    group['Count'] = count_list
    return group

# 按ID分组应用自定义函数
df_result = df1.groupby('ID', group_keys=False).apply(calc_count)

运行后df_result就是你需要的结果,完全匹配你给出的预期输出。如果你的数据量非常大(百万行以上),可以用numba加速自定义函数提升运行效率,普通业务场景下上述代码足够使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:15:02