我想要得到几个数字的加权平均值.基本上我有:
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)
问题是我很快就将"滚动"变量最大化了.
我怎样才能真正得到加权平均值?
我有4种颜色,我从RGB转换为CIELAB L*a*b*模型.
当我拥有这些颜色时,如何计算这4种颜色的混合(L,a,b)?
如果我想(w1, w2, w3, w4)在4种颜色上加权,最多1次,最小0次(无),我该如何计算相同的混合?
我想将加权滚动平均值应用于大型时间序列,设置为 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?或者我必须一起编写一个新函数吗?谢谢你!
我有一个带有一列权重和一个值的数据框。我需要:
有找到一种简单的方法吗?我找到了一种方法,但是似乎有点麻烦:
基本上,我正在寻找一种更好的方法来产生更平滑的曲线。
我的代码(带有一些随机数据)是:
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) 我有一个如下所示的数据框。
权重列本质上代表每个项目的频率,因此对于每个位置,权重总和将等于 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) 我有一个数组:
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) 创建 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 (屏蔽平均值)的文档,但无法理解如何实现它
我这样做只是出于学习目的.我没有打算扭转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评级(=加权平均值)不符.所以我的结论是我在这里遗漏了一些东西,或者我的分数不是理想分数.我可能会遗漏很多东西.
我有以下数据集(我的实际数据的简单版本),'数据',并且想要计算变量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)
除了我的问题包括不同列的不同权重之外,这个问题类似于按组和列加权的方法.我尝试使用数据表,但它遇到与()相同的加权错误.在此先感谢您的帮助.
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) weighted-average ×10
python ×5
pandas ×4
average ×2
mean ×2
numpy ×2
color-space ×1
colors ×1
dataframe ×1
imdb ×1
java ×1
math ×1
matplotlib ×1
postgresql ×1
python-2.7 ×1
r ×1
recursion ×1
sql ×1
statistics ×1