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

按col1列连续值分组,提取每组col2/col3最早、col4/col5最晚日期时间

需求说明

需要按col1列中的连续相同值进行分组,对每个分组提取:

  • col2和col3中的最早日期与小时
  • col4和col5中的最晚日期与小时

原始数据

col1col2col3col4col5
0a2021-07-0317:082021-07-0410:41
1b2021-07-1004:142021-07-1104:32
2c2021-07-1302:032021-07-1400:45
3d2021-07-1421:232021-07-1502:59
4d2021-07-1504:052021-07-1509:41
5e2021-07-1713:502021-07-1808:49
6a2021-07-1810:512021-07-1812:27
7a2021-07-1813:552021-07-1906:26
8f2021-09-2022:362021-09-2023:19
9f2021-09-2123:452021-09-2310:12

期望输出

col1col2col3col4col5
0a2021-07-0317:082021-07-0410:41
1b2021-07-1004:142021-07-1104:32
2c2021-07-1302:032021-07-1400:45
3d2021-07-1421:232021-07-1509:41
4e2021-07-1713:502021-07-1808:49
5a2021-07-1810:512021-07-1906:26
6f2021-09-2022:362021-09-2310:12

解决方案(Python Pandas)

通过生成连续分组标识,再对分组进行聚合操作即可实现需求:

import pandas as pd

# 构造示例数据
data = [
    ["a", "2021-07-03", "17:08", "2021-07-04", "10:41"],
    ["b", "2021-07-10", "04:14", "2021-07-11", "04:32"],
    ["c", "2021-07-13", "02:03", "2021-07-14", "00:45"],
    ["d", "2021-07-14", "21:23", "2021-07-15", "02:59"],
    ["d", "2021-07-15", "04:05", "2021-07-15", "09:41"],
    ["e", "2021-07-17", "13:50", "2021-07-18", "08:49"],
    ["a", "2021-07-18", "10:51", "2021-07-18", "12:27"],
    ["a", "2021-07-18", "13:55", "2021-07-19", "06:26"],
    ["f", "2021-09-20", "22:36", "2021-09-20", "23:19"],
    ["f", "2021-09-21", "23:45", "2021-09-23", "10:12"]
]
df = pd.DataFrame(data, columns=["col1", "col2", "col3", "col4", "col5"])

# 生成连续分组ID:当前行col1与上一行不同时,分组号累加
df["group_id"] = (df["col1"] != df["col1"].shift()).cumsum()

# 分组聚合:提取对应字段的极值
result = df.groupby("group_id").agg(
    col1=("col1", "first"),
    col2=("col2", "min"),
    col3=("col3", "min"),
    col4=("col4", "max"),
    col5=("col5", "max")
).reset_index(drop=True)

print(result)

关键步骤说明

  1. 生成连续分组标识:利用shift()对比当前行与上一行的col1值,通过cumsum()生成唯一的连续分组ID,确保只有相邻相同的col1值被分到同一组。
  2. 聚合逻辑:
    • col1取组内第一个值(同一连续组内值一致)
    • col2/col3用min()获取最早的日期和小时
    • col4/col5用max()获取最晚的日期和小时
  3. 重置索引:去掉分组ID列,使输出索引与期望结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:36:26