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

如何将dataframe每3个观测值分为一组取均值,实现日度数据降采样

解决方案

以下基于Python pandas库实现需求,分两种场景给出可直接运行的代码:

场景1:数据已按采集时间升序排列、无缺失记录、严格每3条对应1天

直接按索引整除3分组计算均值即可:

import pandas as pd

# 请将下方变量替换为你实际的DataFrame名、列名
# 原始DataFrame:df
# 汇率观测值列名:exchange_rate
# 可选:日期列名:date_col

daily_df = df.groupby(df.index // 3).agg(
    # 如需保留日期,保留该行,否则可删除
    record_date = ('date_col', 'first'),
    daily_exchange_avg = ('exchange_rate', 'mean')
).reset_index(drop=True)

运行后daily_df即为30条每日均值的结果集。

场景2:数据包含datetime类型的时间列(推荐,容错性更高)

如果数据自带采集时间戳,优先使用重采样逻辑,可避免因数据顺序错乱、单日采样数量异常导致的计算错误:

# 时间列转为datetime格式(如已转换可跳过该行)
df['collect_time'] = pd.to_datetime(df['collect_time'])

# 将时间列设为索引
df = df.set_index('collect_time')

# 按自然日重采样计算均值
daily_df = df.resample('D')['exchange_rate'].mean().reset_index()

注意事项

  • 如果存在单日采样次数不足3次的情况,重采样方法会自动计算当日所有有效观测的均值,比固定步长分组更符合实际研究需求
  • 如需保留其他字段的聚合结果,可在agg方法中自定义规则,例如数值列取均值、分类列取首个有效值
  • 如果仅需要输出均值数组,可简化写法:daily_avg_list = df['exchange_rate'].groupby(df.index//3).mean().tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:33:03