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

Pandas合并两个DataFrame并转置第二表date列取test字段最新值方案

表2

df2 = pd.DataFrame({'df1_id':['1','2','1','1'],'date':['01-05-2021','03-05-2021','05-05-2021','03-05-2021'],'data':[12,13,16,9],'test':['g','h','j','i'],'test2':['k','l','m','n']})

表2


结果表

结果表


结果表生成规则

  • 现有两个DataFrame,需要基于df1_id字段合并,第二张表的date列需转置为结果表的列。
  • 结果表的日期列范围为第二张表date列的最小值到最大值的全区间。
  • 结果表中各日期列的取值来自第二张表对应的data字段值。
  • 结果表中第二张表的test字段仅取每个df1_id对应的最新日期下的取值。

实现方案

全部使用pandas向量化操作,无逐行遍历,实现代码如下:

import pandas as pd

# 1. 预处理df2,转换日期格式并按日期升序排序
df2['date'] = pd.to_datetime(df2['date'], format='%d-%m-%Y')
df2 = df2.sort_values('date', ignore_index=True)

# 2. 生成日期转置宽表
# 同id同日期的data取最新值,补全完整日期区间
pivot_df = df2.pivot_table(
    index='df1_id',
    columns='date',
    values='data',
    aggfunc='last'
)
full_date_range = pd.date_range(start=df2['date'].min(), end=df2['date'].max(), freq='D')
pivot_df = pivot_df.reindex(columns=full_date_range)
# 日期列名还原为字符串格式
pivot_df.columns = pivot_df.columns.strftime('%d-%m-%Y')
pivot_df = pivot_df.reset_index()

# 3. 提取每个df1_id最新日期对应的test值
latest_test_df = df2.groupby('df1_id', as_index=False)['test'].last()

# 4. 合并所有数据得到最终结果
final_result = df1.merge(pivot_df, on='df1_id', how='left')\
                  .merge(latest_test_df, on='df1_id', how='left')

如果需要将缺失值填充为指定值(比如0),可以在reindex步骤添加fill_value=0参数即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:36:01