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

如何在Pandas中为分组数据添加下一组首个时间作为结束时间

实现分组起始时间与下一组起始时间作为结束时间的聚合

原始数据与现有分组代码

原始数据样本:

import pandas as pd

df = {"Time": ["2011-01-01 00:00:53","2011-01-01 00:27:47",
                "2011-01-01 00:28:59", "2011-01-01 00:29:01", 
               "2011-01-01 00:29:02"],

      "UPN": ["13", "13", "13", "13", "13"], 

      "Value" : [1, 0, 1, 0, 0]
     }

df = pd.DataFrame(df)

已完成的分组代码(可简化为更简洁的写法,效果完全一致):

# 简化逻辑:当Value发生变化时,分组编号自动递增
df["value_grp"] = df.Value.diff().ne(0).cumsum()
# 原代码逻辑等价,可直接替换使用
# df["value_grp"] = (df.Value.diff().ne(0).cumsum() | df.Value.diff().eq(0)).cumsum()

实现end_time列的步骤

1. 转换时间列为datetime类型

先确保Time列是可处理的datetime格式,避免后续时间操作出错:

df['Time'] = pd.to_datetime(df['Time'])

2. 聚合分组的起始时间

通过groupby获取每个分组的基础信息与起始时间:

grouped_result = df.groupby('value_grp').agg(
    UPN=('UPN', 'first'),
    Value=('Value', 'first'),
    Start_Time=('Time', 'first')
).reset_index()

3. 添加end_time(下一组的起始时间)

利用shift(-1)方法,将下一组的Start_Time赋值给当前组的end_time:

grouped_result['end_time'] = grouped_result['Start_Time'].shift(-1)

4. 可选:填充最后一组的end_time

如果需要给最后一组的end_time设置为该组的最后一条记录时间,可执行以下代码:

# 获取每个分组的最后一条时间
group_last_times = df.groupby('value_grp')['Time'].last().reset_index(name='group_last_time')
# 合并到结果表
grouped_result = grouped_result.merge(group_last_times, on='value_grp')
# 填充最后一行空的end_time
grouped_result['end_time'] = grouped_result['end_time'].fillna(grouped_result['group_last_time'])
# 删除临时辅助列
grouped_result = grouped_result.drop('group_last_time', axis=1)

最终得到的grouped_result将包含每个分组的Start_Time和对应的end_time。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:31:03