如何在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
相关产品推荐
相关产品推荐

