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

Pandas按用户分组计算距上一次Flag列为1的时间差实现方法

实现代码

import pandas as pd

# 原始示例数据
df = pd.DataFrame({'user': ['x','x','x','x','x','y','y','y','y'],
          'Flag': [0,1,0,0,1,0,1,0,0],
          'time': [10,34,40,43,44,12,20, 46, 51]})

# 先按用户、时间升序排序,保证计算顺序正确
df = df.sort_values(['user', 'time']).reset_index(drop=True)

# 按用户分组提取每个Flag=1的时间,下移一位后向前填充,得到每行对应的上一次Flag=1的时间
df['last_flag1_time'] = df.groupby('user')['time'].apply(lambda x: x.where(df['Flag'] == 1).shift(1)).ffill().reset_index(drop=True)

# 计算时间差
df['diff'] = df['time'] - df['last_flag1_time']

# 若需要将空缺值填充为指定数值N,取消注释下方代码并替换N为实际值即可
# df['diff'] = df['diff'].fillna(N)

# 删除辅助计算列
df = df.drop('last_flag1_time', axis=1)

输出结果

user  Flag  time  diff
0    x     0    10   NaN
1    x     1    34   NaN
2    x     0    40   6.0
3    x     0    43   9.0
4    x     1    44  10.0
5    y     0    12   NaN
6    y     1    20   NaN
7    y     0    46  26.0
8    y     0    51  31.0

原代码问题说明

你之前的代码逻辑是计算分组内相邻两行的时间差,和需求中「距离上一次Flag=1的时间差」逻辑不匹配,因此无法得到预期结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:48:03