为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算几何平均值并忽略python中的0

如何计算几何平均值并忽略python中的0

德玛西亚99 2022-10-05 09:35:01
我有一个熊猫数据框架,其中包含某些股票的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)的几何平均值是其中 N 是观测值的数量。AAPL.02 * -.001 * .05 * .43**(1/N)是否有某种光滑的代码可以在忽略零的情况下计算几何平均值?
查看完整描述

4 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

一种方法是使用 np.multiply.reduce 并替换它们,以便它们不会修改结果,并除以每列的非零值量:np.where01


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


查看完整回答
反对 回复 2022-10-05
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

创建一个函数,该函数采用列中的所有元素并返回一个元素。将其应用于每一列(在轴 = 0 方向上)。


from functools import reduce


def g_mean(n):

    """Find the geometric mean for iterable n."""


    # Make a list with every element in n that != 0.

    l = [e for e in n if e !=0]


    tot = reduce(lambda a,b: a*b, l) # Multiply all elements in l.

    return tot**(1/(len(l)))


df.apply(g_mean) # Apply g_mean(column) to every column.


查看完整回答
反对 回复 2022-10-05
?
万千封印

TA贡献1891条经验 获得超3个赞

几何均值不适用于包含负值的列表(其中一些结果返回虚数),但话虽如此,以下是您问题的一个答案:


import pandas as pd

import numpy as np



def geometric_mean(values):

    return float(np.prod([x for x in values])) ** (1 / len([x for x in values]))


dictA = {'AAPL': [.02, -.001, .05, .43], 'ABC': [.03, -.02, -.05, 0], 'DEF': [.045, 0, -.10, .63]}

df = pd.DataFrame(dictA)


cols = ['AAPL', 'ABC', 'DEF']

for col in cols:

    # exclude 0s from being passed to the function

    print(geometric_mean(df.loc[df[col] != 0, col]))

编辑:我最初有.我将其更改为,因此如果列表的乘积为负数,则该函数现在将返回虚数。return np.prod([x for x in values]) ** (1 / len([x for x in values]))return float(np.prod([x for x in values])) ** (1 / len([x for x in values]))


查看完整回答
反对 回复 2022-10-05
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

对于负数,我找到了这个。如果我有一个带负数的股票回报数据框,我会执行以下操作:


from scipy.stats import gmean

gmean(1+df, axis = 0) - 1


查看完整回答
反对 回复 2022-10-05
  • 4 回答
  • 0 关注
  • 375 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号