如何在Pandas中无需循环计算并展示比特币平均价格
Pandas 无循环实现累计平均价格计算
你需要实现的逐行截至当日的累计平均价格,本质是对Adj Close列做从序列起始到当前行的扩展窗口均值计算,不需要写for循环,直接用Pandas内置的向量化方法就能实现,运算效率远高于原生Python循环。
实现方案
方案1:扩展窗口直接计算(语义最匹配)
Pandas的expanding()方法会生成从第一行逐行扩大到当前行的计算窗口,直接调用均值聚合方法就能得到你要的结果,逻辑和原循环完全一致:
# min_periods=1 表示从第一行开始就参与计算,不需要凑满窗口长度 btc['TopAverage'] = btc['Adj Close'].expanding(min_periods=1).mean()
方案2:累计和除以累计计数(原理和原循环完全对齐)
如果你想完全对齐原循环里「累计求和+天数计数」的计算逻辑,可以用累计和方法搭配行序号实现:
# cumsum() 得到截至当日的收盘价总和,除以累计天数得到均值 btc['TopAverage'] = btc['Adj Close'].cumsum() / range(1, len(btc)+1)
注意事项
- 计算前请确认
Adj Close列是数值类型,如果是存储为字符串的数值,先执行btc['Adj Close'] = btc['Adj Close'].astype(float)转换类型再计算 - 两种方案的计算结果和你提供的for循环输出完全一致,没有精度差异
内容的提问来源于stack exchange,提问作者Spell D
相关产品推荐
相关产品推荐

