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

如何用Pandas按条件提取数据首尾信息并生成汇总表?

Pandas 按分组提取指定状态记录及最后一条记录

问题描述

原始DataFrame结构

no        date            status   row_ant
1    11 Jan 2023, 07.00      ANT      1
1    11 Jan 2023, 09.00      AU       2
1    12 Jan 2023, 12.00      DLV      3
2    14 Jan 2023, 09.00      BA       1
2    14 Jan 2023, 10.00      AU       2
2    15 Jan 2023, 10.00      ANT      3 
3    15 Jan 2023, 09.00      ANT      1
3    16 Jan 2023, 10.00      AU       2
3    16 Jan 2023, 10.00      ANT      3 

需求说明

需要生成汇总表,包含:

  • 每个no中满足status = ANT且row_ant = 1的第一条date和对应的first_status
  • 每个no的最后一条date和对应的last_status
  • 仅保留存在符合status = ANT且row_ant = 1记录的no(示例中no=2不符合条件,不保留)

期望结果

no         date_ant        first_status   date_last_status    last_status
1    11 Jan 2023, 07.00        ANT        12 Jan 2023, 12.00     DLV
3    15 Jan 2023, 09.00        ANT        16 Jan 2023, 10.00     ANT

当前代码问题

目前仅实现了提取日期的最小最大值,但无法获取对应状态:

df = pd.DataFrame(df.groupby(['no','status','row_ant'])
                .agg({'date':['min','max']})
                    .rename(columns={'min':'date_ant','max':'date_last_status'})).reset_index()

解决方案

可以分三步处理:筛选指定条件的ANT记录、提取每个分组的最后一条记录、合并结果并过滤无效分组。

代码实现

import pandas as pd

# 假设原始数据已加载到df中
# 1. 筛选status=ANT且row_ant=1的记录,重命名列
ant_records = df[(df['status'] == 'ANT') & (df['row_ant'] == 1)].rename(
    columns={'date': 'date_ant', 'status': 'first_status'}
)[['no', 'date_ant', 'first_status']]

# 2. 获取每个no的最后一条记录,重命名列
last_records = df.groupby('no').last().reset_index().rename(
    columns={'date': 'date_last_status', 'status': 'last_status'}
)[['no', 'date_last_status', 'last_status']]

# 3. 内连接合并,自动过滤无有效ANT记录的no
result = pd.merge(ant_records, last_records, on='no', how='inner')

print(result)

代码说明

  • 筛选ANT记录:通过布尔索引精准定位符合条件的行,直接重命名列以匹配需求格式。
  • 提取最后一条记录:groupby('no').last()会自动保留每个分组的最后一行数据,再提取需要的列并重命名。
  • 合并数据:内连接merge只保留同时存在于两个DataFrame中的no,自然过滤掉像no=2这种没有符合条件ANT记录的分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:50:24