大佬教程收集整理的这篇文章主要介绍了滚动平均成本,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有 dataframe
;
df_exa = pd.DataFrame([['B',20,123],['B',14,125],['S',15,122.5],1,124],4,128]],columns=['Buy_Sell','quantity','price'],index=['Basket1','Basket2','Basket3','Basket4','Basket5','Basket6'])
我希望计算滚动累积成本(因此仅考虑 B(用于购买)) 我的结果应该如下所示:
df_exa_avg_cost = pd.DataFrame([['B',123,125,123.8235],123.5714],122.5,123.3333],124,128,123.6119]],'price','avg_cost'],'Basket6'])
我知道如何用 avg_cost
填充新列 for loop
,但我正在尝试使用更有效的方法,因为篮子交易的数量可能会显着增加。
请问有人知道如何实现吗?
你说你只想要 B 的累积平均成本,这是通过以下方式完成的:
df_exa['total'] = df_exa['quantity']*df_exa['price']
df_buy_ex = df_exa[df_exa['Buy_Sell'] == 'B'].copy()
df_buy_ex['t_cumsum'] = df_buy_ex['total'].cumsum()
df_buy_ex['q_cumsum'] = df_buy_ex['quantity'].cumsum()
df_buy_ex['cum_avg_p'] = df_buy_ex['t_cumsum']/df_buy_ex['q_cumsum']
df_exa_avg = df_exa.merge(df_buy_ex['cum_avg_p'],how='left',left_index=True,right_index=True)
df_exa_avg.ffill(inplace=True)
df_exa_avg[['Buy_Sell','quantity','price','cum_avg_p']]
这实际上为您提供了以下内容:
虽然您期望的结果值实际上更符合 B 和 S 的累积平均成本:
df_exa['total'] = df_exa['quantity']*df_exa['price']
df_exa['t_cumsum'] = df_exa['total'].cumsum()
df_exa['q_cumsum'] = df_exa['quantity'].cumsum()
df_exa['cum_avg_p'] = df_exa['t_cumsum']/df_exa['q_cumsum']
df_exa[['Buy_Sell','cum_avg_p']]
给出输出:
,因为你想要'B's的avg_price,你可以这样做
buys = (df_exa['Buy_Sell'] == 'B')
df_exa.loc[buys,'avg_cost'] = ((df_exa.loc[buys,'quantity']*df_exa.loc[buys,'price']).cumsum()/df_exa.loc[buys,'quantity'].cumsum())
df_exa.fillna(method = 'ffill')
送给你
Buy_Sell quantity price avg_cost
Basket1 B 20 123.0 123.000000
Basket2 B 14 125.0 123.823529
Basket3 S 15 123.0 123.823529
Basket4 B 14 122.5 123.437500
Basket5 S 1 124.0 123.437500
Basket6 B 4 128.0 123.788462
以上是大佬教程为你收集整理的滚动平均成本全部内容,希望文章能够帮你解决滚动平均成本所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。