标签: weighted-average

计算大数的加权平均值

我想要得到几个数字的加权平均值.基本上我有:

Price    - 134.42
Quantity - 15236545
Run Code Online (Sandbox Code Playgroud)

可以有少至一个或两个或多达五十或六十对价格和数量.我需要弄清楚价格的加权平均值.基本上,加权平均值应该给对象提供非常小的权重

Price    - 100000000.00
Quantity - 3
Run Code Online (Sandbox Code Playgroud)

以及更多对上面的那对.

我现在的公式是:

((price)(quantity) + (price)(quantity) + ...)/totalQuantity
Run Code Online (Sandbox Code Playgroud)

到目前为止,我做到了这一点:

        double optimalPrice = 0;
        int totalQuantity = 0;
        double rolling = 0;
        System.out.println(rolling);

        Iterator it = orders.entrySet().iterator();
        while(it.hasNext()) {
            System.out.println("inside");
            Map.Entry order = (Map.Entry)it.next();
            double price = (Double)order.getKey();
            int quantity = (Integer)order.getValue();
            System.out.println(price + " " + quantity);

            rolling += price * quantity;
            totalQuantity += quantity;
            System.out.println(rolling);
        }
        System.out.println(rolling);
        return rolling/totalQuantity;
Run Code Online (Sandbox Code Playgroud)

问题是我很快就将"滚动"变量最大化了.

我怎样才能真正得到加权平均值?

java average weighted-average

6
推荐指数
1
解决办法
5430
查看次数

如何计算CIELAB L*a*b*模型中定义的4种颜色的混合?

我有4种颜色,我从RGB转换为CIELAB L*a*b*模型.

  1. 当我拥有这些颜色时,如何计算这4种颜色的混合(L,a,b)

  2. 如果我想(w1, w2, w3, w4)在4种颜色上加权,最多1次,最小0次(无),我该如何计算相同的混合?

colors weighted-average color-space

6
推荐指数
2
解决办法
2317
查看次数

熊猫滚动加权平均值

我想将加权滚动平均值应用于大型时间序列,设置为 pandas 数据框,其中每天的权重都不同。这是数据框的子集

DF:

Date        v_std  vertical                  
2010-10-01  1.909   545.231
2010-10-02  1.890   538.610
2010-10-03  1.887   542.759
2010-10-04  1.942   545.221
2010-10-05  1.847   536.832
2010-10-06  1.884   538.858
2010-10-07  1.864   538.017
2010-10-08  1.833   540.737
2010-10-09  1.847   537.906
2010-10-10  1.881   538.210
2010-10-11  1.868   544.238
2010-10-12  1.856   534.878
Run Code Online (Sandbox Code Playgroud)

我想使用 v_std 作为权重来获取垂直列的滚动平均值。我一直在使用加权平均函数:

def wavg(group, avg_name, weight_name):
    d = group[avg_name]
    w = group[weight_name]
    try:
        return (d * w).sum() / w.sum()
    except ZeroDivisionError:
        return d.mean()
Run Code Online (Sandbox Code Playgroud)

但我不知道如何实现滚动加权平均值。我认为它类似于

df.rolling(window = 7).apply(wavg, "vertical", "v_std")
Run Code Online (Sandbox Code Playgroud)

或利用rolling_apply?或者我必须一起编写一个新函数吗?谢谢你!

python weighted-average pandas

6
推荐指数
1
解决办法
2万
查看次数

如何对x与y的加权平均值(由x加权)进行平滑和绘制?

我有一个带有一列权重和一个值的数据框。我需要:

  • discretise权重,并且对于权重的每个间隔,绘制的值的加权平均值,然后
  • 将相同的逻辑扩展到另一个变量:离散z,并针对每个间隔绘制值的加权平均值,并按权重加权

有找到一种简单的方法吗?我找到了一种方法,但是似乎有点麻烦:

  • 我用pandas.cut()离散化数据框
  • 进行分组并计算加权平均值
  • 绘制每个仓位的平均值与加权平均值的关系图
  • 我也尝试用样条曲线使曲线平滑,但效果不大

基本上,我正在寻找一种更好的方法来产生更平滑的曲线。

我的输出看起来像这样: 在此处输入图片说明

我的代码(带有一些随机数据)是:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.interpolate import make_interp_spline, BSpline

n=int(1e3)
df=pd.DataFrame()
np.random.seed(10)
df['w']=np.arange(0,n)
df['v']=np.random.randn(n)
df['ranges']=pd.cut(df.w, bins=50)
df['one']=1.
def func(x, df):
    # func() gets called within a lambda function; x is the row, df is the entire table
    b1= x['one'].sum()
    b2 = x['w'].mean()
    b3 = x['v'].mean()       
    b4=( x['w'] * x['v']).sum() / x['w'].sum() if x['w'].sum() >0 else …
Run Code Online (Sandbox Code Playgroud)

python matplotlib weighted-average pandas pandas-groupby

6
推荐指数
1
解决办法
319
查看次数

熊猫加权统计数据

我有一个如下所示的数据框。

重列本质上代表每个项目的频率,因此对于每个位置,权重总和将等于 1

请记住,这是一个简化的数据集,实际上有超过 100 列,例如value

d = {'location': ['a', 'a', 'b', 'b'],'item': ['x', 'y', 's', 'v'], 'value': [1, 5, 3, 7], 'weight': [0.9, 0.1, 0.8, 0.2]}
df = pd.DataFrame(data=d)
df
  location item value weight
0     a     x     1     0.9
1     a     y     5     0.1
2     b     s     3     0.8
3     b     v     7     0.2
Run Code Online (Sandbox Code Playgroud)

我目前有代码可以计算未加权数据的分组中位数、标准差、偏斜和分位数,我使用以下代码:

df = df[['location','value']]

df1 = df.groupby('location').agg(['median','skew','std']).reset_index()

df2 = df.groupby('location').quantile([0.1, 0.9, 0.25, 0.75, 0.5]).unstack(level=1).reset_index()

dfs = df1.merge(df2, how …
Run Code Online (Sandbox Code Playgroud)

python mean weighted-average dataframe pandas

6
推荐指数
1
解决办法
2275
查看次数

加权平均值使用numpy.average

我有一个数组:

In [37]: bias_2e13 # our array
Out[37]: 
[1.7277990734072355,
 1.9718263893212737,
 2.469657573252167,
 2.869022991373125,
 3.314720313010104,
 4.232269039271717]
Run Code Online (Sandbox Code Playgroud)

数组中每个值的错误是:

In [38]: bias_error_2e13 # the error on each value
Out[38]: 
array([ 0.13271387,  0.06842465,  0.06937965,  0.23886647,  0.30458249,
        0.57906816])
Run Code Online (Sandbox Code Playgroud)

现在我将每个值的误差除以2:

In [39]: error_half # error divided by 2
Out[39]: 
array([ 0.06635694,  0.03421232,  0.03468982,  0.11943323,  0.15229124,
        0.28953408])
Run Code Online (Sandbox Code Playgroud)

现在我numpy.average使用errorsas 计算数组的平均值,但是使用as weights.

首先,我使用值的完整错误,然后我使用错误的一半,即错误除以2.

In [40]: test = np.average(bias_2e13,weights=bias_error_2e13)

In [41]: test_2 = np.average(bias_2e13,weights=error_half)
Run Code Online (Sandbox Code Playgroud)

当一个数组的错误是另一个数组的一半时,两个平均值如何给出相同的结果

In [42]: test
Out[42]: 3.3604746813456936

In [43]: test_2
Out[43]: …
Run Code Online (Sandbox Code Playgroud)

python numpy average weighted-average python-2.7

5
推荐指数
1
解决办法
1万
查看次数

Pandas/numpy 加权平均 ZeroDivisionError

创建 lambda 函数来计算加权平均值并将其发送到字典。

wm = lambda x: np.average(x, weights=df.loc[x.index, 'WEIGHTS'])

# Define a dictionary with the functions to apply for a given column:
f = {'DRESS_AMT': 'max', 
     'FACE_AMT': 'sum',
     'Other_AMT': {'weighted_mean' : wm}}

# Groupby and aggregate with dictionary:
df2=df.groupby(['ID','COL1'], as_index=False).agg(f)
Run Code Online (Sandbox Code Playgroud)

此代码有效,但如果权重总计为 0 ,则加权平均 lambda 函数会失败ZeroDivisionError。在这些情况下,我希望输出“Other_AMT”仅为 0。

我阅读了有关使用 np.ma.average (屏蔽平均值)的文档,但无法理解如何实现它

python numpy divide-by-zero weighted-average pandas

5
推荐指数
1
解决办法
4162
查看次数

你如何计算IMDB电影评级?

我这样做只是出于学习目的.我没有打算扭转IMDB的方法.

我问自己我拥有IMDB或类似的网站.我该如何计算电影评级?

我能想到的只是加权平均值(这只是算术平均值)

对于下面提供的电影数据,计算将是

(38591*10 + 27994*9 + 32732*8 + 17864*7 + 7361*6 + 2965*5 + 1562*4 + 1073*3 + 891*2 + 3401*1)/ 134434 = 8.17055953

替代文字


我的评级8.17055953与IMDB评级(=加权平均值)不符.所以我的结论是我在这里遗漏了一些东西,或者我的分数不是理想分数.我可能会遗漏很多东西.

  1. 我的分数怎么了?为什么不理想?
  2. 如果你不得不计算.你会怎么做的?

math statistics imdb weighted-average

4
推荐指数
2
解决办法
3766
查看次数

对于具有不同权重的组,计算R中的一系列加权平均值

我有以下数据集(我的实际数据的简单版本),'数据',并且想要计算变量x1和x2的加权平均值,分别使用权重w1和w2,分成两组(由变量n确定的组) ).

data <- data.frame(n = c(1,1,1,2,2,2), x1 = c(4,5,4,7,5,5), x2 = c(7,10,9,NaN,11,12), w1 = c(0,1,1,1,1,1), w2 = c(1,1,1,0,0,1))
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用with()但在运行时遇到错误:

with(data, aggregate(x = list(x1=x1, x2=x2), by = list(n = n), FUN = weighted.mean, w = list(w1 = w1,w2 = w2)))
Run Code Online (Sandbox Code Playgroud)

另一方面,如果未指定权重,则它可以工作,但在这种情况下使用默认级别权重(即与使用FUN = mean相同).

with(data, aggregate(x = list(x1=x1, x2=x2), by = list(n = n), FUN = weighted.mean))
Run Code Online (Sandbox Code Playgroud)

除了我的问题包括不同列的不同权重之外,这个问题类似于按组和列加权的方法.我尝试使用数据表,但它遇到与()相同的加权错误.在此先感谢您的帮助.

r mean with-statement weighted-average

4
推荐指数
1
解决办法
618
查看次数

SQL - 使用 CTE 或聚合计算指数移动平均值?

EMA的一般公式:

EMA(x n ) = α * x n + (1 - α) * EMA(x n-1 )

在哪里:

x n = 价格
α = 0.5 -- 给定 3 天 SMA

下面的递归 CTE 可以完成这项工作:

WITH recursive
ewma_3 (DATE, PRICE, EMA_3, rn)
AS (

    -- Anchor
    -- Feed SMA_3 to recursive CTE
    SELECT rows."DATE", rows."PRICE", sma.sma AS ewma, rows.rn
    FROM (
        SELECT "DATE", "PRICE", ROW_NUMBER() OVER(ORDER BY "DATE") rn
        FROM PRICE_TBL
    ) rows
    JOIN (
        SELECT "DATE",
           ROUND(AVG("PRICE"::numeric)
              OVER(ORDER BY "DATE" ROWS …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursion weighted-average

4
推荐指数
1
解决办法
1907
查看次数