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
相关产品推荐
相关产品推荐

