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
相关产品推荐
相关产品推荐

