Pandas高效添加from-to列:按指定字段分组获取时间首尾
高效实现Pandas分组生成from-to列
核心方案
直接用Pandas原生的groupby + transform组合完成,无需手动循环。这一方案基于Pandas底层C优化的矢量化操作,效率远高于Python层面的双重循环。
实现步骤
- 确定分组键:将
startTime、endTime、source作为分组依据,三个字段完全匹配的记录归为同一组。 - 分组计算极值:对每组的
time字段,分别提取首次出现值(first())和末次出现值(last())。 - 广播拼接结果:通过
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')
输出结果
| time | startTime | endTime | source | other_col | from-to |
|---|---|---|---|---|---|
| 2023-01-01 08:00 | 2023-01-01 07:00 | 2023-01-01 09:00 | A | x | 2023-01-01 08:00 - 2023-01-01 08:20 |
| 2023-01-01 08:10 | 2023-01-01 07:00 | 2023-01-01 09:00 | A | y | 2023-01-01 08:00 - 2023-01-01 08:20 |
| 2023-01-01 08:20 | 2023-01-01 07:00 | 2023-01-01 09:00 | A | z | 2023-01-01 08:00 - 2023-01-01 08:20 |
| 2023-01-01 09:00 | 2023-01-01 08:30 | 2023-01-01 10:00 | B | m | 2023-01-01 09:00 - 2023-01-01 09:10 |
| 2023-01-01 09:10 | 2023-01-01 08:30 | 2023-01-01 10:00 | B | n | 2023-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
相关产品推荐
相关产品推荐

