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

在Pandas DataFrame中按日期(小时级数据)分组添加当日high最大值列的实现方法

为DataFrame按日期分组添加每日high最大值列的实现方案

刚好我之前处理过类似的需求,其实不用手动遍历每行(这种方法在数据量大的时候效率特别低),用Pandas的分组+变换操作就能轻松搞定,而且代码简洁高效。

实现步骤

首先要确保你的date列是datetime类型,如果还没转换的话,先执行这一步:

import pandas as pd

# 转换date列为datetime类型(如果还没转的话)
df_sub['date'] = pd.to_datetime(df_sub['date'])

接下来直接新增目标列,核心逻辑是按日期(提取日期部分,忽略时分秒)分组,然后对每组的high列取最大值,再把这个最大值广播到该组的每一行:

# 新增daily_high_max列,存储对应日期的high最大值
df_sub['daily_high_max'] = df_sub.groupby(df_sub['date'].dt.date)['high'].transform('max')

代码解释

  • df_sub['date'].dt.date:把带时分秒的datetime值转换成纯日期对象,这样就能按自然日分组
  • groupby(...)['high']:按日期分组后,聚焦到high列
  • transform('max'):这一步是关键,它会计算每个分组的最大值,然后将这个值填充到该分组的每一行中,而不是只返回每个分组的单个值,完美匹配你需要的“每行对应日期最大值”的需求

举个例子,你提供的2022-01-03的几条数据里,high列的最大值是4298.0(对应行408),那这一天的所有行的daily_high_max都会被赋值为4298.0,完全符合你的要求。

为什么推荐这个方法

手动遍历每行的方式(比如用for循环逐行处理)在数据量小的时候看似可行,但当你的DataFrame有几千甚至几万行时,速度会慢得离谱。而Pandas的groupby+transform是向量化操作,底层用C实现,效率能提升几十甚至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:33:13