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

如何从另一DataFrame提取时段最高值为目标DataFrame新增列赋值?

解决为df2添加区间最高high值列的问题

问题背景

现有两个DataFrame结构如下:

# df1
date         open high low close
2022-03-01   11   33   5   22
2022-03-02   12   34   6   23
2022-03-03   13   35   7   24
2022-03-04   14   36   8   25
2022-03-05   15   37   9   26
2022-03-06   16   38   10  27
......

# df2
date         close 
2022-03-01   22    
2022-03-04   25
2022-03-06   27
......

需求:为df2新增high列,每一行的high值为df1中从起始日期到该行日期区间内的最高high值。例如df2中2022-03-04对应的区间是2022-03-01至2022-03-04,该区间最高high为36,因此该行df2['high']应为36。

尝试过的无效代码

joined_df = df1.join(df2, how='inner')
high_values = joined_df.groupby(joined_df.index)['high'].max()
df2['high'] = df1.index.map(high_values)

解决方案

你的思路问题在于没有正确计算区间累计最大值,而是做了简单的合并和分组,以下是正确的实现步骤:

  1. 确保日期列是datetime类型(避免字符串排序问题):
import pandas as pd

df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'])
  1. 为df1计算从起始日到每个日期的累计最高high值:
df1['cum_high'] = df1['high'].cummax()

cummax()会逐行计算到当前行为止的最大值,正好符合"从起始到当前日期区间最高值"的需求。

  1. 将df2与df1的日期、累计最高值列合并,保留df2的所有行:
df2 = df2.merge(df1[['date', 'cum_high']], on='date', how='left').rename(columns={'cum_high': 'high'})

执行后df2的结果如下:

date       close  high
2022-03-01     22    33
2022-03-04     25    36
2022-03-06     27    38

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:32:04