首页 > 解决方案 > 如何在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 是观察次数。

是否有某种巧妙的代码可以计算几何平均值而忽略零?

标签: pythonpandas

解决方案


一种方法是使用np.multiply.reducenp.where替换它们01这样它们就不会修改结果,然后除以每列的非零值的数量:

a = df.values
m = (a!=0)
np.multiply.reduce(np.where(m, a, 1), axis=0)**(1/m.sum(0))

推荐阅读