首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果为负,则使用加权平均

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

Stack Overflow用户
提问于 2016-09-06 01:16:05
回答 2查看 77关注 0票数 2

我有一个DataFrame:

代码语言:javascript
复制
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)

代码语言:javascript
复制
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']

这很好,但是当总量开始减少时,这会降低加权平均价格。

我的问题是,如果Total减少,我如何让WAP反映上面的行?例如,在第3行中,Total是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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-06 01:39:13

您可以使用cummax:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2016-09-06 01:51:47

作为一个彻底的Python初学者,这里有两个我能想到的选择

任一

代码语言:javascript
复制
a['WAP'] = np.maximum.accumulate(a['Cum Sum Amount'] / a['Total'])

或者,在创建了WAP之后,您可以使用diff方法仅修改子集(感谢loc的@ayhan,它将就地修改a )

代码语言:javascript
复制
a.loc[a['WAP'].diff() < 0, 'WAP'] = max(a['WAP'])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39335149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档