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

在Pandas中按分组列计算基于动作指标的时间差

优化后的标题建议

这里给出几个精准描述需求的标题选项,适合Stack Overflow提问:

  • Calculate time interval since last binary action flag per user group, returning NaN for actions or no prior activity
  • Compute time difference from most recent action (binary marker) per user, with NaN for action rows and initial non-action entries
  • How to calculate time since last action flag per user in pandas, excluding current action rows from interval calculation
问题分析

你需要处理一个包含用户ID、连续时间和二进制动作标记的数据集,核心需求是:

  • 按用户ID分组独立计算
  • 对每个时间点,若当前是动作(k=1),返回NaN
  • 若当前是非动作(k=0),计算与该用户最近一次动作的时间间隔;若该用户此前无动作记录,同样返回NaN
解决方案(Pandas实现)

下面是基于Python Pandas的实现代码,完全匹配你的示例输出:

import pandas as pd
import numpy as np

# 构造你的示例数据集
data = [
    [0, 0, 0], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 1], [0, 5, 0],
    [1, 0, 0], [1, 1, 1], [1, 2, 0], [1, 3, 1], [1, 4, 0]
]
df = pd.DataFrame(data, columns=["a", "b", "k"])

def compute_diff_b(group):
    # 确保每组按时间升序排列(即使原始数据有序,也做一层保障)
    group = group.sort_values("b").reset_index(drop=True)
    last_action_time = None
    diff_list = []
    
    for _, row in group.iterrows():
        if row["k"] == 1:
            # 当前是动作,记录时间但返回NaN
            diff_list.append(np.nan)
            last_action_time = row["b"]
        else:
            # 当前是非动作,判断是否有前置动作记录
            if last_action_time is not None:
                diff_list.append(row["b"] - last_action_time)
            else:
                diff_list.append(np.nan)
    
    group["diff_b"] = diff_list
    return group

# 按用户分组计算并合并结果
result_df = df.groupby("a", group_keys=False).apply(compute_diff_b)

# 输出结果(和你的示例一致)
print(result_df.to_string(index=False))

代码说明

  1. 分组处理:用groupby("a")按用户ID拆分数据集,确保每个用户的计算独立
  2. 时间排序:对每组按时间b升序排列,保证计算逻辑的正确性
  3. 遍历计算:维护last_action_time变量记录最近一次动作的时间,逐行判断并生成diff_b值
  4. 结果合并:将每组的计算结果合并成最终数据集

运行代码后输出的结果完全匹配你提供的示例:

a b k diff_b
0 0 0   NaN
0 1 1   NaN
0 2 0     1
0 3 0     2
0 4 1   NaN
0 5 0     1
1 0 0   NaN
1 1 1   NaN
1 2 0     1
1 3 1   NaN
1 4 0     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:38