python - 如何在python中计算几何平均值并忽略0
问题描述
我有一个熊猫数据框,其中包含 13 列某些股票的每日股票收益。我想计算每列的几何平均值,但有些列中的零是因为这些企业在不同时间在股票市场上实现。
我知道 numpy 的算术平均值会忽略 NaN。有没有办法计算几何平均值并同时忽略零?
样本df:
import pandas as pd
dictA = {'AAPL': [.02, -.001, .05, .43], 'ABC':[.03, -.02, -.05, 0], 'DEF': [.045, 0, -.10, .63]}
df = pd.DataFrame(dictA)
的几何平均值AAPL
将是.02 * -.001 * .05 * .43**(1/N)
其中 N 是观察次数。
是否有某种巧妙的代码可以计算几何平均值而忽略零?
解决方案
一种方法是使用np.multiply.reduce
并np.where
替换它们0
,1
这样它们就不会修改结果,然后除以每列的非零值的数量:
a = df.values
m = (a!=0)
np.multiply.reduce(np.where(m, a, 1), axis=0)**(1/m.sum(0))
推荐阅读
- reactjs - react-player 中的 Wistia 播放导致错误“XMLHttpRequeset 构造函数已被篡改”
- android - Android-从按页面组织的api中获取所有json项目
- apache - httpd.service 活动失败
- ios - SciChart IOS 固定网格线和刻度标签
- kubernetes - 在不指定端口号的情况下发现 Kubernetes Pod
- android - 将斯坦福 NER 集成到 Android 中
- join - 减少 CouchDB 中的多个连接
- ruby-on-rails - Rails 应用程序推送到 Heroku 后样式表不起作用
- angular - 分离角度前端和管理部分的最佳方法
- android - 无法在弹出窗口中创建表面视图