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

如何在DataFrame中使用Pivot提取最新日期对应的Output与Date值

解决方案

核心思路

先为每个A_Id+F_Id组合筛选出最新日期对应的记录,再通过透视转换为目标格式,避免聚合多条记录的问题。

步骤1:确保日期列可比较

先将Date列转换为datetime类型,保证能正确判断日期先后:

import pandas as pd

# 转换Date列为datetime类型
source['Date'] = pd.to_datetime(source['Date'])

步骤2:筛选每组最新记录

按A_Id和F_Id分组,对每组按日期降序排序后保留第一条(即最新记录):

# 按日期降序排序,再去重保留每个(A_Id,F_Id)的第一条(最新)记录
latest_records = source.sort_values('Date', ascending=False).drop_duplicates(subset=['A_Id', 'F_Id'], keep='first')

步骤3:生成目标格式

选项1:双层列的单DataFrame

直接透视生成包含Output和Date的双层列结构:

result_df = latest_records.pivot(index='A_Id', columns='F_Id', values=['Output', 'Date'])

选项2:两个独立的DataFrame

分别生成Output矩阵和Date矩阵(若需要字符串格式的日期,可额外转换):

# 生成Output矩阵
output_df = latest_records.pivot(index='A_Id', columns='F_Id', values='Output')

# 生成Date矩阵,转换为示例中的字符串格式
date_df = latest_records.pivot(index='A_Id', columns='F_Id', values='Date')
date_df = date_df.applymap(lambda dt: dt.strftime('%Y/%m/%d'))

为什么之前的方法不适用

你之前用pivot_table的聚合函数会把同一组合的所有值拼接,但实际需求是只保留最新日期的单条记录。先筛选再透视的方式更高效,也完全匹配需求,同时避免了Timestamp转字符串的报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:19:55