python - DataFrame 中的几何平均值

标签 python pandas scipy

我正在尝试获取行中的几何平均值,DataFrame 如下所示:

               PLTRNSU00013 PLSRBEX00014 PLATTFI00018 PLALMTL00023 PLAMBRA00013   PLAMICA00010 PLAMPLI00019 NL0000474351 PLAPATR00018 PLAPLS000016
 2010-07-01          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN  
 2010-10-01          NaN          NaN          NaN          NaN          NaN          NaN          NaN     0.968237          NaN          NaN 
 2011-01-01          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN  
 2011-04-01          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN  
 2011-07-01     0.979871          NaN          NaN          NaN          NaN          NaN          NaN      1.00999          NaN          NaN 
 2011-10-01          NaN          NaN          NaN          NaN          NaN       1.00737         NaN          NaN          NaN          NaN  
 2012-01-01          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN      1.05766          NaN 
 2012-04-01          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN     0.979955          NaN 
 2012-07-01          NaN          NaN          NaN          NaN          NaN          NaN          NaN          NaN      1.01718          NaN 
 2012-10-01          NaN     0.916302          NaN          NaN          NaN          NaN          NaN     0.979858          NaN          NaN 

我没有找到任何 pandas buildin 方法,所以我使用的是 scipy 的 gmean 从 scipy.stats.mstats 导入 gmean 但是当在行上调用时:

In [285]:gmean(DataFrame.loc['2015-10-01'])
Traceback (most recent call last):

  File "<ipython-input-28-e9186c65a04d>", line 1, in <module>
    gmean(DataFrame.loc['2015-10-01'])

  File "D:\Python\lib\site-packages\scipy\stats\stats.py", line 305, in gmean
    log_a = np.log(np.array(a, dtype=dtype))

 AttributeError: 'float' object has no attribute 'log'

我收到异常 AttributeError 我尝试用

摆脱 Nan
In [287]: gmean(DataFrame.loc['2015-10-01'].dropna())
Traceback (most recent call last):

  File "<ipython-input-29-e8807696d6be>", line 1, in <module>
    gmean(DataFrame.loc['2015-10-01'].dropna())

  File "D:\Python\lib\site-packages\scipy\stats\stats.py", line 305, in gmean
    log_a = np.log(np.array(a, dtype=dtype))

AttributeError: 'numpy.float64' object has no attribute 'log'

我可以用 math pow 方法手动完成,但当然效率很低,它只适用于标量。

最佳答案

我们可以用 numpy 手动完成:

np.exp(np.log(df.prod(axis=1))/df.notna().sum(1))

输出:

2010-07-01         NaN
2010-10-01    0.968237
2011-01-01         NaN
2011-04-01         NaN
2011-07-01    0.994817
2011-10-01    1.007370
2012-01-01    1.057660
2012-04-01    0.979955
2012-07-01    1.017180
2012-10-01    0.947547
dtype: float64

关于python - DataFrame 中的几何平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56465969/

相关文章:

python - 限制类变量的修改,新实例除外

javascript - 在 Electron 应用程序中嵌入其他程序

java - 实现屏蔽算法(例如: noise addition) on excel numerical data using java or python

python - Pandas - 在日期分组内进行分箱

python - 压缩一维 numpy 数组到二维汉明距离矩阵

python - 当我尝试使用 for 循环设置约束时,Scipy Optimization 未运行

python - 用 numpy 计算 k 个最大特征值和相应特征向量的最快方法

python - 属性错误 : '_process_plot_var_args' object has no attribute 'get_next_color'

python - 获取包含负值的列的列名列表

python - 删除列值 < 0 的 Pandas DataFrame 行