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

Python中对Pandas DataFrame按id分组,保留最早start_date和最晚end_date

按ID分组取最早起始日期和最晚结束日期的实现方案

输入数据

id   start_date   end_date
1    2023-01-01   2023-02-02
1    2023-02-05   2023-02-15
1    2023-02-16   2023-03-14

预期结果

id   start_date   end_date
1    2023-01-01   2023-03-14

1. SQL 通用实现

这是关系型数据库的标准解法,通过GROUP BY结合聚合函数直接完成需求:

SELECT 
    id,
    MIN(start_date) AS start_date,
    MAX(end_date) AS end_date
FROM your_table_name
GROUP BY id;

核心逻辑:按id分组后,用MIN()提取每组最早的起始日期,MAX()提取每组最晚的结束日期,直接输出目标结果。

2. Python Pandas 实现

如果用Pandas处理内存中的数据集,可通过groupby配合agg方法实现:

import pandas as pd

# 构造输入DataFrame
data = {
    'id': [1, 1, 1],
    'start_date': ['2023-01-01', '2023-02-05', '2023-02-16'],
    'end_date': ['2023-02-02', '2023-02-15', '2023-03-14']
}
df = pd.DataFrame(data)

# 转换为日期类型(确保聚合逻辑准确)
df['start_date'] = pd.to_datetime(df['start_date'])
df['end_date'] = pd.to_datetime(df['end_date'])

# 分组聚合
result_df = df.groupby('id').agg(
    start_date=('start_date', 'min'),
    end_date=('end_date', 'max')
).reset_index()

print(result_df)

执行后会输出符合预期的结果,reset_index()用于将分组的id还原为普通列。

3. Spark 大数据场景实现

针对大数据量的Spark环境,写法与SQL逻辑一致:

// Scala 示例
val df = spark.read.table("your_table_name")
val resultDF = df.groupBy("id")
                 .agg(
                     min("start_date").alias("start_date"),
                     max("end_date").alias("end_date")
                 )
resultDF.show()

也可以直接执行Spark SQL语句:

SELECT 
    id,
    MIN(start_date) AS start_date,
    MAX(end_date) AS end_date
FROM your_table_name
GROUP BY id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:17:04