如何在Pandas DataFrame中将时间列转换为左开右闭的起止时间列
解决方案
你这个需求可以直接用Pandas的分组位移函数shift()实现,核心逻辑是按ID分组后取每个ID的上一行时间作为start值,首个记录的start直接用当前时间填充即可。
完整实现代码如下:
import pandas as pd # 构造示例DataFrame,也可以读取你的现有数据 df = pd.DataFrame({ 'id': [1,2,3,4,2,3,1,4,1,2,1,2,3,4], 'time': [0,0,0,0,1,1,2,2,3,3,4,4,4,4] }) # 核心计算逻辑 # 按id分组取上一行的time值,首行空值用当前time填充作为start列 df['start'] = df.groupby('id')['time'].shift(1).fillna(df['time']).astype(int) # stop列直接复用原time列 df['stop'] = df['time'] # 按输出要求调整列顺序 df = df[['id', 'start', 'stop']] print(df)
运行后输出的结果和你给出的预期格式完全一致。
内容的提问来源于stack exchange,提问作者user572780
相关产品推荐
相关产品推荐

