查找,分组并计算加权平均值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找,分组并计算加权平均值?相关的知识,希望对你有一定的参考价值。

我没有更好的头衔,所以这里。

我有一个查找表,显示每个CityId到每个商店之间的距离。例如,第一行告诉我H1距离Eagle 2.5英里。它只显示H部分,但它有CityId和商店之间的所有可能的组合:

declare @stores table 
(
    CityId varchar(10),
    miles decimal(8,2),
    store varchar(30)
)
insert into @stores

select 'H1',2.5, 'Eagle' union
select 'H1',3.5, 'Sears' union
select 'H1',2.0, 'BK' union
select 'H2',2.0, 'Eagle' union
select 'H2',1.5, 'Sears' union
select 'H2',1.8, 'BK' union
select 'H3',0.1, 'Eagle' union
select 'H3',0.5, 'Sears' union
select 'H3',0.7, 'BK'

这是数据表。它有多少商店离开每个部分:

declare @gone table
(
    City varchar(10),
    CityId varchar(10),
    Outs int
)
insert into @gone 
select 'Houston', 'H1', 6  union 
select 'Houston','H2', 4  union
select 'Houston', 'H3', 1  union
select 'Miami', 'M1', 12  union
select 'Miami', 'M2', 10  union
select 'Miami', 'M3', 18 union
select 'Miami', 'M4', 15

要在weighted average获得EagleHouston,我必须获得休斯顿是城市的所有行,将@gone.Outs乘以距离,并除以所有Outs的总和。

对于Houston - Eagle组合,它将是:

[((H1到Eagle)* 6)+((H2到Eagle)* 4)+((H3到Eagle)* 1)] /(H1 Out + H2 Out + H3 Out)

这是:

((2.5 * 6)+(2.0 * 4)+(0.1 * 1))/(4 + 6 + 1)= 2.1('鹰')

对于Houston - Sears组合,它将是:

[((H1 to Sears)* 6)+((H2 to Sears)* 4)+((H3 to Sears)* 1)] /(H1 Out + H2 Out + H3 Out)

这是:

((6 * 3.5)+(4 * 1.5)+(1 * 0.5))/(4 + 6 + 1)= 2.5('西尔斯')

在迈阿密,这是一回事:

[((M1 to Sears)* 6)+((M2 to Sears)* 4)+((M3 to Sears)* 1)+((M4 to Sears)* 1)] /(M1 Out + M2 Out + M3出+ M4出)

结果应如下所示:

City      Store    Avg
-----------------------
Houston   Eagle    2.1
Houston   Sears    2.5
Houston   BK       X.X
Miami     Eagle    X.X
Miami     Sears    X.X
Miami     BK       X.X
etc...

嗯,非常感谢任何帮助。

答案

这应该工作:

select g.City, s.Store, sum(s.miles * g.Outs)/sum(g.Outs) as [Avg]
from @gone g
inner join @stores s on g.CityId = s.CityId
group by g.City, s.store
另一答案

仍然未经测试,但我认为这样做会:

SELECT City, Store, 
  SUM(miles*outs)/(SELECT SUM(outs) FROM @gone g2 WHERE g2.CityID=s.CityID) AS WeightedAverage
FROM @stores s
INNER JOIN @gone g
  ON s.CityID=g.CityID
GROUP BY Store, CityID, City

以上是关于查找,分组并计算加权平均值?的主要内容,如果未能解决你的问题,请参考以下文章

R:具有分组并且依赖于另一个变量的加权平均值

使用 NumPy 函数计算 Pandas 中的加权平均值

使用 pandas/dataframe 基于 2 列计算加权平均值

Pandas Groupby 加权标准差

Pandas:交换一个数据框中的特定列值并计算其加权平均值

用numpy计算成交量加权平均价格(VWAP),并实现读写文件