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

Pandas使用groupby按id分组迭代 基于前序行值新增列的实现问题

Python实现Pandas分组取前序行新增列需求

实现步骤

  • 第一步:导入依赖库
import pandas as pd
  • 第二步:构造示例数据(已有DataFrame可直接跳过此步)
data = {
    'id': ['client1', 'client1', 'client3', 'client3', 'client2'],
    'beg': ['2021-10-19 16:01:01', '2021-10-21 10:41:53', '2021-10-21 09:00:00', '2021-10-21 10:00:00', '2021-10-21 10:00:00'],
    'end': ['2021-10-21 08:19:17', '2021-10-24 07:53:57', '2021-10-21 10:00:00', '2021-10-22 14:00:00', '2021-10-21 14:00:00']
}
df = pd.DataFrame(data)
# 若需要将时间列转为datetime格式可执行下方代码,不影响逻辑运行
# df['beg'] = pd.to_datetime(df['beg'])
# df['end'] = pd.to_datetime(df['end'])
  • 第三步:核心逻辑实现
# 按id分组,取组内上一行的end值作为col1
df['col1'] = df.groupby('id')['end'].shift(1)
# 仅col1有值(即当前行是组内第二条及之后行)时,取当前行beg作为col2
df['col2'] = df.apply(lambda x: x['beg'] if pd.notna(x['col1']) else pd.NA, axis=1)
# 空值统一替换为'-',符合输出要求
df = df.fillna('-')
  • 可选补充:若数据需要先按id和起始时间排序再计算前序值,可在核心逻辑前执行排序
df = df.sort_values(['id', 'beg']).reset_index(drop=True)

执行完成后输出的df即符合你给出的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03