Pandas Series累计乘积重采样:自定义日频聚合方法求解
解决非唯一时间索引的日频聚合问题
你的问题出在asfreq要求原时间索引必须唯一且单调,而数据里的秒级重复索引违反了这个要求,导致调用失败。改用resample方法就能处理非唯一索引的时间序列,同时支持自定义聚合逻辑。
基础聚合(内置方法)
如果只是需要常见的聚合逻辑(比如取当日首/末值、均值、求和),直接用resample搭配内置聚合函数即可:
取每日最后一个数据点(等效于ffill到日频的核心需求)
freq = "D" compounded_daily = compounded.resample(freq).last()
取每日第一个数据点
compounded_daily = compounded.resample(freq).first()
其他内置聚合示例
# 每日均值 compounded_daily = compounded.resample(freq).mean() # 每日求和 compounded_daily = compounded.resample(freq).sum()
自定义聚合函数
如果需要更复杂的逻辑,比如根据日内数据做自定义计算,直接给apply传入自定义函数即可:
def daily_custom_agg(sub_df): # sub_df是对应单日的所有秒级数据子集 # 示例:计算当日最大值与最小值的平均值 return (sub_df.max() + sub_df.min()) / 2 # 应用自定义函数到每日分组 compounded_daily = compounded.resample("D").apply(daily_custom_agg)
resample会自动将所有秒级数据按日期分组,不管原索引是否重复,都能精准归类到对应的日区间中,生成的结果索引就是每日的起始时间(如YYYY-MM-DD 00:00:00),和asfreq的输出格式一致。
内容的提问来源于stack exchange,提问作者Mikko Ohtamaa
相关产品推荐
相关产品推荐

