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

如何仅对Pandas DataFrame子集执行运算以提升数据处理性能

Pandas仅计算最近N条滚动平均的高效实现方案

核心思路

跳过全量滚动遍历逻辑,直接对最后10条数据做切片聚合,所有操作仅涉及目标区间的数据读写,不会触发全量计算,也不需要修改原数据结构或创建新DataFrame。

适用场景1:仅需要得到最近10条的平均数值

直接用tail切片取数后计算均值即可,开销极小:

window_size = 10
# 仅读取最后10行的price列计算均值,不会遍历全量200行数据
last_10_avg = df['price'].tail(window_size).mean()

适用场景2:需要把均值写入原DataFrame最后一行

仅对最后一行的指定列赋值,不会修改其他行数据:

# 直接把计算结果赋值给原df最后一行的新列,无需新建df
df.loc[df.index[-1], 'recent_10_avg'] = df['price'].tail(10).mean()

适用场景3:需要生成最后10行对应的滚动均值(第191~200行每行的10条滚动平均)

仅对最后19行做滚动计算,再把结果赋值回原df对应位置,避免全量运算:

window_size = 10
# 仅取最后 window_size*2 -1 行做滚动计算,保证最后10行的结果有效
partial_rolling = df['price'].iloc[-(window_size * 2 - 1):].rolling(window_size).mean()
# 仅把最后10行的结果赋值回原df,不影响其他行数据
df.loc[partial_rolling.index[-window_size:], 'recent_10_avg'] = partial_rolling.iloc[-window_size:]

增量更新优化(适合高频新增数据的场景)

如果你的数据是持续新增的,不需要每次都重新计算最后10条的均值,用增量逻辑更新即可:

window_size = 10
# 首次计算初始窗口均值
current_avg = df['price'].tail(window_size).mean()

# 新增价格数据new_price时,增量计算新的均值
new_price = 99.9
current_avg = current_avg - df['price'].iloc[-window_size]/window_size + new_price/window_size
# 写入新数据和对应均值到原df
df.loc[len(df)] = {'price': new_price, 'recent_10_avg': current_avg}

以上所有方案都满足保留全量原始数据、不创建新DataFrame的要求,计算量仅为全量滚动运算的5%不到,数据量越大性能优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:48:02