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

pandas如何按连续相同值分组统计每组的最小与最大日期

解决方法

这种对连续相同字段值分组统计的需求,通常被称为连续孤岛分组或者会话分组,pandas里可以通过位移+累加的方式完全向量化实现,不需要写循环。

完整实现代码

import pandas as pd

# 构造测试数据
df = pd.DataFrame({
    'state': ['a', 'a', 'b', 'b', 'a', 'a'],
    'date': pd.to_datetime(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06'])
})

# 【如果原始数据未按日期排序,先执行这一步】
# df = df.sort_values('date')

# 核心逻辑:生成连续分组键
group_key = df['state'].ne(df['state'].shift()).cumsum()

# 分组聚合得到结果
result = df.groupby([group_key, 'state'], as_index=False)['date'].agg(
    min_date='min',
    max_date='max'
).drop(columns=group_key.name)

print(result)

逻辑说明

  • df['state'].ne(df['state'].shift()):将当前行的state值和上一行对比,不相等时返回True,代表新连续组的起始位置
  • cumsum():对布尔值做累加,True会被当作1、False当作0,累加后相同的值就对应同一个连续state组
  • 按分组键+state分组聚合,取date的最小、最大值,即可得到目标结果

输出结果完全匹配需求:

state   min_date   max_date
0     a 2020-01-01 2020-01-02
1     b 2020-01-03 2020-01-04
2     a 2020-01-05 2020-01-06

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:05