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

如何在Pandas中按连续分组(姓名+CAR_ID)重置计算最小日期?

Pandas实现连续分组的最小日期计算

要实现按连续出现的(姓名+CAR_ID)组合分组,计算每组的最小DATE值,核心是先创建基于序列顺序的分组标识,再进行分组计算。具体步骤如下:

1. 确保日期列格式正确

先将DATE列转为datetime类型,避免字符串比较导致的错误:

import pandas as pd

# 假设你的数据集是df
df['DATE'] = pd.to_datetime(df['DATE'])

2. 创建连续分组标识

通过对比当前行与上一行的姓名、CAR_ID是否一致,生成连续分组的ID:

# 当任意一个字段(姓名/CAR_ID)与上一行不同时,标记为新分组,累加得到分组ID
df['continuous_group'] = (
    (df['FIRST_NAME'] != df['FIRST_NAME'].shift()) |
    (df['LAST_NAME'] != df['LAST_NAME'].shift()) |
    (df['CAR_ID'] != df['CAR_ID'].shift())
).cumsum()

这里的shift()方法用来获取上一行的字段值,cumsum()会将每次字段变化的标记累加,生成唯一的连续分组ID。

3. 计算每个连续分组的最小日期

用transform('min')直接将分组计算的最小日期映射回原数据集,无需额外合并操作:

df['MIN_DATE'] = df.groupby('continuous_group')['DATE'].transform('min')

4. (可选)清理辅助列

如果不需要保留分组标识列,可以删除:

df = df.drop('continuous_group', axis=1)

效果示例

假设原数据如下:

FIRST_NAMELAST_NAMECAR_IDDATE
AliceSmith12023-01-01
AliceSmith12023-01-03
AliceSmith22023-01-05
AliceSmith12023-01-07

处理后得到的MIN_DATE列:

FIRST_NAMELAST_NAMECAR_IDDATEMIN_DATE
AliceSmith12023-01-012023-01-01
AliceSmith12023-01-032023-01-01
AliceSmith22023-01-052023-01-05
AliceSmith12023-01-072023-01-07

这种方法区别于普通groupby(['FIRST_NAME','LAST_NAME','CAR_ID']),后者会把所有相同组合的行归为一组(比如上面示例中第1、2、4行),而我们的方案仅将连续出现的相同组合视为独立分组,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:31:25