Python 如果为负,则使用加权平均

Python 如果为负,则使用加权平均,python,pandas,Python,Pandas,我有一个数据帧: a = {'Price': [10, 15, 20, 25, 30], 'Total': [10000, 12000, 15000, 14000, 10000], 'Previous Quarter': [0, 10000, 12000, 15000, 14000]} a = pd.DataFrame(a) print (a) 有了这些原始数据,我添加了许多附加列,包括加权平均价格(WAP) 这是很好的,但是,由于总量开始减少,这降低了加权平均价格 我的问题是,如果总数减少

我有一个数据帧:

a = {'Price': [10, 15, 20, 25, 30], 'Total': [10000, 12000, 15000, 14000, 10000],
 'Previous Quarter': [0, 10000, 12000, 15000, 14000]}
a = pd.DataFrame(a)
print (a)
有了这些原始数据,我添加了许多附加列,包括加权平均价格(WAP)

这是很好的,但是,由于总量开始减少,这降低了加权平均价格

我的问题是,如果总数减少,我将如何让WAP反映上述行?例如,在第3行中,总计为1000,低于第2行。这使WAP从12.6降到了11.78,但我希望它是12.6而不是11.78

我已经尝试过在['Total']<0和['WAP']=0之间循环,但这会影响整个列

最后,我想找一个WAP专栏,内容如下: 10,10.83,12.6,12.6,12.6

您可以使用:


作为一名Python初学者,我可以考虑以下两种选择

或者

a['WAP'] = np.maximum.accumulate(a['Cum Sum Amount'] / a['Total'])
或者在您已经创建了
WAP
之后,您可以使用
diff
方法仅修改子集(感谢@ayhan提供
loc
,它将修改
a

a.loc[a['WAP'].diff()<0,'WAP']=max(a['WAP'])

a['WAP']=np.maximum.accumulate(a['Cum Sum-Amount']]/a['Total'])对你有用吗?你可以将第二个更改为
a.loc[a['WAP'].diff()<0,'WAP']=max(a['WAP'])
以避免警告。@ayhan谢谢,我刚刚读到这篇文章的时候正准备好
a['WAP'] = (a['Cum Sum Amount'] / a['Total']).cummax()

print (a['WAP'])

0    10.000000
1    10.833333
2    12.666667
3    12.666667
4    12.666667
Name: WAP, dtype: float64
a['WAP'] = np.maximum.accumulate(a['Cum Sum Amount'] / a['Total'])
a.loc[a['WAP'].diff() < 0, 'WAP'] = max(a['WAP'])