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

Python供应链/制造场景下DataFrame分组聚合需求:按Lot统计UnitsProduced总和并获取首尾日期时间

解决方案:按Lot分组聚合生产数据

没问题,这个需求用pandas的groupby和聚合操作就能轻松实现,我给你一步步拆解:

步骤1:准备示例数据

首先我们先把你提供的简化版DataFrame用代码还原出来:

import pandas as pd

# 构建示例数据
data = {
    'Lot': [1, 1, 2, 3, 3, 3],
    'UnitsProduced': [5, 13, 20, 15, 6, 28],
    'Date/StartTime': ['1/1/2021 8:00', '1/2/2021 10:00', '1/3/2021 7:00', '1/4/2021 14:30', '1/4/2021 20:00', '1/5/2021 7:00'],
    'Date/EndTime': ['1/1/2021 13:00', '1/2/2021 14:00', '1/3/2021 11:00', '1/4/2021 19:00', '1/4/2021 22:00', '1/5/2021 13:00']
}

df = pd.DataFrame(data)

步骤2:(可选但推荐)转换日期列为datetime类型

为了避免字符串排序导致的首尾时间错误,建议先把日期列转换成datetime格式:

df['Date/StartTime'] = pd.to_datetime(df['Date/StartTime'])
df['Date/EndTime'] = pd.to_datetime(df['Date/EndTime'])

步骤3:分组聚合计算

使用groupby按Lot分组,然后通过agg方法指定每列的聚合规则:

  • UnitsProduced:求和(sum)
  • Date/StartTime:取每组第一个值(first)
  • Date/EndTime:取每组最后一个值(last)

代码如下:

# 分组聚合
result = df.groupby('Lot').agg(
    UnitsProduced=('UnitsProduced', 'sum'),
    Date_StartTime=('Date/StartTime', 'first'),
    Date_EndTime=('Date/EndTime', 'last')
).reset_index()

# 重命名列以匹配你期望的格式
result = result.rename(columns={
    'UnitsProduced': 'Units Produced',
    'Date_StartTime': 'Date/StartTime',
    'Date_EndTime': 'Date/EndTime'
})

# 如果需要将日期转回原字符串格式(可选)
result['Date/StartTime'] = result['Date/StartTime'].dt.strftime('%m/%d/%Y %H:%M')
result['Date/EndTime'] = result['Date/EndTime'].dt.strftime('%m/%d/%Y %H:%M')

最终结果

运行上面的代码后,你会得到完全符合需求的结果:

Lot  Units Produced Date/StartTime Date/EndTime
0    1              18  01/01/2021 08:00  01/02/2021 14:00
1    2              20  01/03/2021 07:00  01/03/2021 11:00
2    3              49  01/04/2021 14:30  01/05/2021 13:00

如果你的实际数据有更多列或者特殊格式,只需要调整agg里的规则就可以啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:02:30