【问题标题】:weighted average price without cummax没有cummax的加权平均价格
【发布时间】:2017-06-13 11:01:04
【问题描述】:

我正在尝试找到以下的加权平均值。

a = {'Price': [10, 15, 5, 25, 30], 'Total': [10000, 12000, 15000, 14000, 0],
     'Previous Quarter': [0, 10000, 12000, 15000, 14000]}
a = pd.DataFrame(a)
print (a)

我正在使用下面的公式来做到这一点

a['Change'] = a['Total'] - a['Previous Quarter']
a['Amount'] = a['Price']*a['Change']
a['Cum Sum Amount'] = np.cumsum(a['Amount'])
a['WAP'] = (a['Cum Sum Amount'] / a['Total']).cummax()

我使用 cummax 作为加权平均价格不能降低,如果总减少。这很好用,但是如果总量增加但价格下降,加权平均价格应该下降,但由于 cummax 它不能。

有没有办法可以看到如下内容:

a['Change'] = a['Total'] - a['Previous Quarter']
a['Amount'] = a['Price']*a['Change']
a['Cum Sum Amount'] = np.cumsum(a['Amount'])
a['WAP'] = [10, 10.83, 10.00, 10.00, 0]

【问题讨论】:

  • “我用cummax作为加权平均价格,如果总量减少就不能减少。”什么意思?您是否暗示您的限制之一是无论 WAP 的价值是多少,您都不能低于初始价格?还是别的什么?
  • 如果你在 a['wap'] 中取第三个数字,你会看到它从 10.83 减少到 10。这是正确的,但是 cummax 会将值保持在 10.83。但是,如果不使用 cummax,第 4 个数字也会减少 10,因为总数会减少。然而,实际上这不会发生。所以我需要它说如果总减少然后cummax,但是如果总增加那么不是cummax

标签: python pandas numpy


【解决方案1】:

加权平均价格只是收入/数量。将季度收入和数量分成各自的列,然后除以累积和(假设行按季度升序排序):

a = {'Price': [10, 15, 5, 25, 30], 'Total': [10000, 12000, 15000, 14000, 0],
     'Previous Quarter': [0, 10000, 12000, 15000, 14000]}
a = pd.DataFrame(a)

a["quarter_volume"] = a["Total"] - a["Previous Quarter"]
a["quarter_revenue"] = a["Price"] * a["quarter_volume"]
a["quarter_revenue"].cumsum() / a["quarter_volume"].cumsum()

【讨论】:

  • 除了使用这个作为总数减少加权平均减少。我试图避免这种情况
  • 抱歉,我不确定你的意思。如果出现负销售额,则加权平均值应该减少。
猜你喜欢
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
相关资源
最近更新 更多