![](/img/trans.png)
[英]Using decorators to solve mathematical equations in Python (Past Paper Qs)
[英]Creating a table using mathematical equations Pandas Python
基於下面的字典,我想創建一個新的 DataFrame function 所有獨特的股票是 META 和 BABA。 買入和賣出的數量對應於交易品種的買入和賣出。
我還想制作一個專欄來跟蹤該股票的Gains/Loss
,因為它將從賣出價值(買入 - 賣出)中減去買入價值,例如(2360.15-2160.36) + (1897-1936.2)
,因為 META 被買入並且在 2 個不同的場合賣了兩次,價值就是這樣。
最后但並非最不重要的一點是,我想通過等式 (Buy-Sell)/Buy * 100 計算出收益/損失百分比,因此對於 META,該等式將類似於((2360.15-2160.36)/2360.15 + (1897-1936.2)/1897)* 100)
。 我如何才能修改下表以獲得預期的輸出?
import pandas as pd
a = {'Date': {0: '2/4/2022 1:33:40 PM', 1: '2/7/2022 3:09:46 PM', 2: '2/11/2022 9:35:44 AM', 3: '2/14/2022 2:55:33 PM', 4: '2/15/2022 3:55:33 PM', 5: '2/15/2022 9:15:33 PM'},
'TransactionType': {0: 'Buy', 1: 'Buy', 2: 'Sell', 3: 'Sell', 4: 'Buy', 5:'Sell'},
'Symbol': {0: 'META', 1: 'BABA', 2:'META', 3: 'BABA',4: 'META', 5: 'META' },
'Price': {0: 12.79, 1: 116.16, 2: 12.93, 3: 121.82, 4: 13.55, 5:13.83},
'Amount': {0: -2366.15, 1: -2439.36, 2: -2160.0, 3: 2558.22, 4:-1897, 5:1936.2}}
print((2360.15-2160.36) + (1897-1936.2))
print(2439.36-2558.22)
print(((2360.15-2160.36)/2360.15 + (1897-1936.2)/1897)* 100)
print(((2439.36-2558.22)/2439.36) * 100)
當前data.table:
預計 Output:
(i) 我們可以使用groupby
+ count
+ unstack
來獲取每個“符號”的買賣數量
(ii) 我們可以使用eq
+ groupby
+ cumsum
創建買賣對; 然后groupby
這些對與“符號”分組以獲得Gains/Losses
和“百分比變化”列:
out = df.groupby(['Symbol','TransactionType'])['TransactionType'].count().unstack().add_prefix('Number of ').add_suffix('s')
g = df.groupby(['Symbol', df['TransactionType'].eq('Buy').groupby(df['Symbol']).cumsum()])['Amount']
out['Gains/Losses'] = g.sum().groupby(level=0).sum()
out['Percentage change'] = g.pct_change().groupby(df['Symbol']).sum()
out = out.reset_index().rename_axis([None], axis=1)
Output:
Symbol Number of Buys Number of Sells Gains/Losses Percentage change
0 BABA 1 1 118.86 -2.048726
1 META 2 2 -166.95 -3.933540
請注意,我在此處獲得的數字與您預期的 output 中的數字不同,因為您提供的輸入 DataFrame 與您在分析中使用的 DataFrame 不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.