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

如何在多组时间序列DataFrame中添加组内最新日期对应值列?

解决方法

要在原DataFrame中给每组填充对应最新日期的VALUE值,核心是让计算出的组级结果和原表的每一行正确对齐,以下是几种实用方案:

方案1:用transform直接赋值(最简洁)

transform方法会将组内计算的结果广播到该组的所有行,自动和原DataFrame索引对齐,直接新增列即可:

首先确保日期列是datetime类型(如果不是先转换):

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

然后新增LATEST_VALUE列:

# 定义函数,返回每组最新日期对应的VALUE
def get_latest_val(group):
    max_date = group['DATE'].max()
    return group.loc[group['DATE'] == max_date, 'VALUE'].iloc[0]

# 用groupby+transform直接生成对应列
df['LATEST_VALUE'] = df.groupby('GROUP').transform(get_latest_val)

方案2:先构建映射字典,再用map赋值

先提取每组最新日期对应的VALUE,生成一个GROUP到VALUE的映射字典,再通过原表的GROUP列匹配赋值:

# 获取每组最大日期对应的VALUE,转成字典
group_latest = df.groupby('GROUP').apply(
    lambda x: x.loc[x['DATE'] == x['DATE'].max(), 'VALUE'].iloc[0]
).to_dict()

# 给原表新增列
df['LATEST_VALUE'] = df['GROUP'].map(group_latest)

方案3:用merge合并结果

如果需要更清晰的步骤,可先生成包含GROUP和对应最新VALUE的临时表,再和原表合并:

# 1. 获取每组的最大日期
max_dates = df.groupby('GROUP')['DATE'].max().reset_index(name='MAX_DATE')
# 2. 合并原表和最大日期表,筛选出对应行的VALUE
latest_vals = df.merge(max_dates, on='GROUP').query('DATE == MAX_DATE')[['GROUP', 'VALUE']].rename(columns={'VALUE': 'LATEST_VALUE'})
# 3. 合并回原表
df = df.merge(latest_vals, on='GROUP', how='left')

注意事项

  • 如果同一组内最新日期对应多行数据(即同一天有多个VALUE),可根据需求调整:比如用.mean()取均值、.iloc[-1]取最后一个值,替换代码中的.iloc[0]即可。
  • 你的原代码之所以无法直接对应到原表,是因为groupby.apply返回的是每组一个值的结果集,没有和原表的行索引对齐,而上面的方案都解决了对齐问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:32:36