У меня есть следующие данные:
inputdata = [[1,'long',30.2,'Win'],[1,'long',-12.4,'Loss'],
[2,'short',-12.3,'Loss'],[1,'long',3.2,'Win'],
[3,'short',0.0,'B/E'],[3,'short',23.2,'Win'],
[3,'long',3.2,'Win'],[4,'short',-4.2,'Loss']]
datadf = DataFrame(columns=['AssetId','Direction','PnL','W_L'], data = inputdata)
datadf
AssetId Direction PnL W_L
0 1 long 30.2 Win
1 1 long -12.4 Loss
2 2 short -12.3 Loss
3 1 long 3.2 Win
4 3 short 0.0 B/E
5 3 short 23.2 Win
6 3 long 3.2 Win
7 4 short -4.2 Loss
Теперь я хочу объединить их в новый фрейм данных, который выглядит как этот макет (добавлено несколько строк образцов, необходимо добавить дополнительную статистику:
Stat Long Short Total
0 Trades 4 4 8
1 Won 3 1 4
2 Lost 1 2 3
(...)
Я пробовал это:
datadf.groupby(['Direction'])['PnL'].count()
Direction
long 4
short 4
Name: PnL, dtype: int64
Это дает необходимые данные, но мне придется заполнять поле кадра агрегированных данных по полю, что кажется громоздким, и я даже не уверен, как чтобы получить точное значение в каждой строке / столбце. На основании этого примера, есть ли лучший способ достичь этой цели?