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

如何对Pandas DataFrame按ID分组,保留起止时间并求和Value列

解决方法:用Pandas GroupBy + Aggregate一键实现

你完全不用手动逐个处理每个id,Pandas的groupby配合agg方法就能轻松实现这个需求,代码简洁且不易出错。

实现代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
IDs = ['A','A','A','B','B']
times = pd.date_range(start='01/01/2019',end='01/02/2019',freq='h')
times_2 = pd.date_range(start='01/01/2019',end='01/02/2019',freq='h') + pd.Timedelta('15min')
Vals = [np.random.randint(15,250) for x in enumerate(times)]
df = pd.DataFrame({'id' : IDs*5, 'Start' : times, 'End' : times_2, 'Value' : Vals},columns=['id','Start','End','Value'])

# 核心分组聚合操作
result = df.groupby('id').agg(
    Start=('Start', 'min'),
    End=('End', 'max'),
    Value=('Value', 'sum')
).reset_index()

print(result)

代码解释

  • groupby('id'):按id列对DataFrame进行分组
  • agg(...):为每个分组的不同列指定专属聚合规则:
    • Start=('Start', 'min'):提取每个id分组下Start列的最早时间
    • End=('End', 'max'):提取每个id分组下End列的最晚时间
    • Value=('Value', 'sum'):计算每个id分组下Value列的总和
  • reset_index():将分组用的id从索引还原为普通列,匹配你期望的输出格式

输出示例(与需求结构一致)

id               Start                 End  Value
0  A 2019-01-01 00:00:00 2019-01-01 22:15:00   2007
1  B 2019-01-01 03:00:00 2019-01-02 00:15:00   1385

这种方法彻底替代了手动遍历id的繁琐操作,而且Pandas内部的分组逻辑经过优化,运行效率也更高。

内容的提问来源于stack exchange,提问作者Umar.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:40:30