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

Pandas高效添加from-to列:按指定字段分组获取时间首尾

高效实现Pandas分组生成from-to列

核心方案

直接用Pandas原生的groupby + transform组合完成,无需手动循环。这一方案基于Pandas底层C优化的矢量化操作,效率远高于Python层面的双重循环。

实现步骤

  1. 确定分组键:将startTime、endTime、source作为分组依据,三个字段完全匹配的记录归为同一组。
  2. 分组计算极值:对每组的time字段,分别提取首次出现值(first())和末次出现值(last())。
  3. 广播拼接结果:通过transform将分组计算的结果映射回原DataFrame的每一行,再拼接成from-to格式的字符串。

代码示例

模拟输入数据

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'time': ['2023-01-01 08:00', '2023-01-01 08:10', '2023-01-01 08:20',
             '2023-01-01 09:00', '2023-01-01 09:10'],
    'startTime': ['2023-01-01 07:00', '2023-01-01 07:00', '2023-01-01 07:00',
                  '2023-01-01 08:30', '2023-01-01 08:30'],
    'endTime': ['2023-01-01 09:00', '2023-01-01 09:00', '2023-01-01 09:00',
                '2023-01-01 10:00', '2023-01-01 10:00'],
    'source': ['A', 'A', 'A', 'B', 'B'],
    'other_col': ['x', 'y', 'z', 'm', 'n']
})

高效实现代码

# 分组计算每组的首次/末次time,用transform广播到每一行并拼接
grouped = df.groupby(['startTime', 'endTime', 'source'])['time']
df['from-to'] = grouped.transform('first') + ' - ' + grouped.transform('last')

输出结果

timestartTimeendTimesourceother_colfrom-to
2023-01-01 08:002023-01-01 07:002023-01-01 09:00Ax2023-01-01 08:00 - 2023-01-01 08:20
2023-01-01 08:102023-01-01 07:002023-01-01 09:00Ay2023-01-01 08:00 - 2023-01-01 08:20
2023-01-01 08:202023-01-01 07:002023-01-01 09:00Az2023-01-01 08:00 - 2023-01-01 08:20
2023-01-01 09:002023-01-01 08:302023-01-01 10:00Bm2023-01-01 09:00 - 2023-01-01 09:10
2023-01-01 09:102023-01-01 08:302023-01-01 10:00Bn2023-01-01 09:00 - 2023-01-01 09:10

对比暴力实现

假设你的暴力实现逻辑类似以下代码:

# 低效的暴力实现示例
df['from-to'] = ''
groups = df.groupby(['startTime', 'endTime', 'source'])
for name, group in groups:
    first_time = group['time'].iloc[0]
    last_time = group['time'].iloc[-1]
    for idx in group.index:
        df.loc[idx, 'from-to'] = f"{first_time} - {last_time}"

这种双重循环的方式在数据量较大时(比如十万级以上行)会产生巨大的Python循环开销,而transform直接在C层面完成分组计算与广播,效率能提升几个数量级。

内容的提问来源于stack exchange,提问作者Yarin Michael Bouzaglo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:36:29