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

Python pandas如何基于时间获取DataFrame产品列最新记录状态

需求说明

现有如下结构的DataFrame:
Dataframe示例
需要获取product列对应各产品最新一条记录的status状态,原有实现代码如下:

for i in df["product"]:
    process_status = df[df.Processid == i].status.to_string(index=False)
    
    if process_status=="pass":
        print("green")
    if process_status=="fail":
        print("red")

原有代码未基于时间维度做筛选,无法获取最新数据对应的状态。

实现方案

第一步先确认时间列格式,必须转为pandas支持的datetime类型才能正确排序/比较大小,将代码里的time_col替换为你表中实际存储记录时间的列名即可:

import pandas as pd
df['time_col'] = pd.to_datetime(df['time_col'])

方案1:排序后去重(写法简洁,性能好)

先按时间倒序排列所有记录,同产品的最新记录会排在最前,之后按产品去重仅保留第一条记录,就能得到每个产品的最新状态,不需要写冗余循环:

# 按记录时间倒序排序,最新的记录排在最前
df_sorted = df.sort_values(by='time_col', ascending=False)
# 按产品去重,每个产品仅保留第一条(最新)记录,提取产品和状态两列
latest_record = df_sorted.drop_duplicates(subset='product', keep='first')[['product', 'status']]

# 输出对应颜色标识
for _, item in latest_record.iterrows():
    if item['status'] == 'pass':
        print(f"{item['product']}: green")
    elif item['status'] == 'fail':
        print(f"{item['product']}: red")

方案2:分组取时间最大值对应行

按产品分组,直接定位每个产品对应时间最大的行索引,提取对应记录:

# 取每个产品分组下时间最大的行索引
latest_index = df.groupby('product')['time_col'].idxmax()
latest_record = df.loc[latest_index, ['product', 'status']]
# 后续颜色输出逻辑和方案1完全一致

原有代码存在两个明显问题:一是筛选条件写错了列,按产品匹配应该筛选product列而非Processid列;二是直接遍历全量product列做匹配会产生大量重复计算,数据量较大时运行效率极低,不推荐这种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:18:15