按Id分组上移time_spent_in_sec列并填充每组末行值为0
解决方案
你需要按Id分组后对time_spent_in_sec执行向下偏移(shift(-1)),再将每组最后一行产生的NaN填充为0即可,具体代码如下:
完整代码示例
import pandas as pd # 构造原始DataFrame data = { 'Id': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], 'event': ['in', 'step_1', 'step_2', 'done', 'in', 'step_1', 'step_2', 'step_3', 'done'], 'time_spent_in_sec': [0, 2.2, 3, 3, 0, 5, 8, 15, 7] } df = pd.DataFrame(data) # 核心操作:分组偏移+填充0 df['time_spent_in_sec'] = df.groupby('Id')['time_spent_in_sec'].shift(-1).fillna(0) print(df)
代码说明
- 分组偏移:
groupby('Id')['time_spent_in_sec'].shift(-1)会对每个Id组内的time_spent_in_sec列执行向下偏移,即把下一行的值移到当前行,每组最后一行因为没有下一行,会生成NaN。 - 填充0:
fillna(0)将所有NaN替换为0,正好满足每组最后一行设为0的需求。
运行后输出的结果与你预期的DataFrame完全一致。
内容的提问来源于stack exchange,提问作者Roshankumar
相关产品推荐
相关产品推荐

