Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不含cummax的加权平均价格_Python_Pandas_Numpy - Fatal编程技术网

Python 不含cummax的加权平均价格

Python 不含cummax的加权平均价格,python,pandas,numpy,Python,Pandas,Numpy,我试图找到下面的加权平均数 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': [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]

加权平均价格只是收入/数量。将季度收入和交易量拆分为各自的列,然后除以累计金额。假设行按季度升序排列:

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()

我使用的是cummax,因为如果总价格降低,加权平均价格不会降低。什么意思?您是否暗示您的限制之一是无论WAP的价值是多少,您都不能低于初始价格?或者别的什么?如果你按照我的要求在[wap]中取第三个数字,你会看到它从10.83减少到10。这是正确的,但是cummax会将该值保持在10.83。但是,如果不使用cummax,第四个数字10也会减少,因为总数会减少。然而,在现实中,这并没有发生。所以我需要它来说明,如果total减少了,那么cummax,但是如果total增加了,那么不是cummax,除非用它作为total减少了加权平均值的减少。我想避免这个对不起,我不知道你的意思。如果出现负销售额,则加权平均值应降低。