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

如何在Pandas中按日期聚合计算均值(无需循环)

按日期分组计算均值(无需循环实现)

完全不需要用foreach循环,Pandas的**分组聚合(groupby + 聚合函数)**就是专门解决这类问题的矢量化方案,效率比循环高得多。

核心解法

针对你的需求,只需要按日期列(对应你的数据里的datadate)分组,然后对value列计算均值即可。对应示例数据的代码如下:

import pandas as pd

# 示例数据
sample_data = {
    'date': ['2022-09-16', '2022-09-16', '2022-09-16', '2022-09-15', '2022-09-15', '2022-09-15', '2022-09-14'],
    'value': [1, 2, 3, 6, 2, 2, 7]
}
df = pd.DataFrame(sample_data)

# 按日期分组计算均值
result_df = df.groupby('date')['value'].mean().reset_index()
print(result_df)

运行后输出你期望的结果:

date      value
0  2022-09-14   7.000000
1  2022-09-15   3.333333
2  2022-09-16   2.000000

结合你的现有代码修改

你的代码已经完成了z-score处理,只需要在最后添加分组计算逻辑即可,同时修正set_index的赋值问题(原代码中dfyieldd.set_index('datadate')不会修改原DataFrame,因为默认不原地修改):

import pandas as pd

# 你的原有代码
dfyieldd = pd.read_sql_query(getmacrofactorvalues, conn)
dfyieldd.to_csv('dfyieldd_raw.csv')

resultseries = pd.Series(data=dfyieldd['rawvalue'])
resultzscored = zscoreoutliers(resultseries)

dfyieldd['value'] = resultzscored
dfyieldd.to_csv('dfyieldd_zcored.csv')

# --- 新增分组计算逻辑 ---
# 按datadate分组,计算value列的均值,重置索引恢复日期为普通列
result_df = dfyieldd.groupby('datadate')['value'].mean().reset_index()

# 可选:将日期转为datetime类型
result_df['datadate'] = pd.to_datetime(result_df['datadate'])

# 保存最终结果
result_df.to_csv('dfyieldd_daily_mean.csv', index=False)

关键说明

  • groupby('datadate'):将DataFrame按datadate列的值分组,相同日期的行自动归为一组
  • ['value'].mean():对每个分组的value列计算均值,自动完成「求和÷记录数」的逻辑
  • reset_index():将分组用的datadate从索引变回普通列,得到结构规整的结果DataFrame

这种方式是Pandas原生的矢量化操作,底层用C实现,比Python循环快几个数量级,尤其适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:15:21