基于买卖的加权平均收购成本熊猫

Posted

技术标签:

【中文标题】基于买卖的加权平均收购成本熊猫【英文标题】:weighted average acquisition cost pandas based on buy and sell 【发布时间】:2021-05-11 19:09:54 【问题描述】:

谢谢大家的宝贵时间

我有一个如下所示的数据框,

import pandas as pd
import numpy as np

raw_data = 'Date':  ['04-23-2020', '05-05-2020', '05-05-2020', '05-11-2020', '05-11-2020', 
          '05-12-2020', '05-12-2020', '05-27-2020', '06-03-2020'],
'Type': ['Buy', 'Buy', 'Sell', 'Buy', 'Sell', 'Buy', 'Buy', 
         'Buy', 'Sell'],
'Ticker': ['AAA', 'AAA', 'AAA', 'AAA', 'AAA', 
           'BBB', 'CCC', 'CCC', 'CCC'],
'Quantity': [60000, 12000, -30000, 49000, -30000, 2000, 10000, 28500, -10000],
'Price': [60.78, 82.20, 0, 100.00, 0, 545.00, 141.00, 172.00, 
                    0]
       

df = pd.DataFrame (raw_data, columns = ['Date','Type','Ticker','Quantity','Price']).sort_values(['Date','Ticker']).reset_index(drop = True)

我的目标是在有卖出交易时计算加权平均价格。请看我下面的预期结果。我已经尝试了一个 for 循环,但我无法得到结果。

mycode 当前代码

df['Pur_Value'] = df['Quantity'] * df['Price']
df['TotalQty'] = df.groupby('Ticker')['Quantity'].cumsum()

grpl = df.groupby(by = ['Ticker'])

df1 = pd.DataFrame()

finaldf = pd.DataFrame()

for key in grpl.groups.keys():
df1 = grpl.get_group(key).loc[:,['Type','Ticker','Date','Quantity','Price','Pur_Value']]
df1.sort_values(by=['Ticker','Date'],inplace=True)
df1.reset_index(drop=True,inplace=True)
Cum_Value = 0
Cum_Shares = 0
for Index,Tic in df1.iterrows():
    if Tic['Type'] == "Buy":
        Cum_Value += Tic['Pur_Value'] 
        Cum_Shares += Tic['Quantity']
    else:
        df1['sold_price'] = Cum_Value/Cum_Shares
finaldf = finaldf.append(df1)

预期结果是具有已售股票的加权平均价格的列,如下所示。


【问题讨论】:

【参考方案1】:

我能够使用以下代码解决我自己的问题。谢谢

for key in grpl.groups.keys():
df1 = grpl.get_group(key).loc[
    :, ["Type", "Ticker", "Date", "Quantity", "Price", "Pur_Value"]
]
df1.sort_values(by=["Ticker", "Date"], inplace=True)
df1.reset_index(drop=True, inplace=True)
Cum_Value = 0
Cum_Shares = 0
Cum_price = 0
sold_value = 0
for Index, Tic in df1.iterrows():
    if Tic["Type"] == "Buy":
        Cum_Value += Tic["Pur_Value"]
        Cum_Shares += Tic["Quantity"]
        Cum_price = Cum_Value / Cum_Shares
    else:
        sold_value = Cum_price * Tic["Quantity"]
        Cum_Shares += Tic["Quantity"]
        Cum_Value += sold_value
        Cum_price = Cum_Value / Cum_Shares
        Ticker.append(Tic["Ticker"])
        Dates.append(Tic["Date"])
        sold_price.append(Cum_price)

【讨论】:

以上是关于基于买卖的加权平均收购成本熊猫的主要内容,如果未能解决你的问题,请参考以下文章

使用熊猫/数据框计算加权平均值

熊猫数据框每一行的加权平均值

如何使用带有询价和出价的熊猫数据框计算体积加权平均价格(VWAP)?

与熊猫的加权相关系数

熊猫加权统计

在熊猫滚动中应用自定义窗口功能