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

