如何对DataFrame按唯一ID和Subset分组计算shift(-1)后差值
正确实现需要将shift操作放到groupby分组对象内执行,确保移位仅在相同ID和Subset的分组内部生效,代码如下:
df['New Col'] = df.groupby(['ID', 'Subset'])['Start'].shift(-1) - df['End']
逻辑说明
- 用
groupby(['ID', 'Subset'])将数据按指定字段拆分为独立分组 - 对每个分组内的
Start列执行shift(-1)操作:仅将分组内的行向上偏移一位,每个分组的最后一行偏移后默认返回NaN,不会跨分组取值 - 偏移后的Start列会自动和原表的End列按索引对齐做减法,完全符合需求的计算规则
如果你的数据没有提前按分组内的时间/位置逻辑排序,建议先执行排序再计算,避免前后行顺序不符合预期:
# 示例为按Start升序排序,可根据实际业务调整排序字段 df = df.sort_values(['ID', 'Subset', 'Start']).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Vivek Sukhala
相关产品推荐
相关产品推荐

