агрегировать фрейм данных по горизонтали - PullRequest
0 голосов
/ 29 мая 2020

У меня есть следующие данные:

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

Это дает необходимые данные, но мне придется заполнять поле кадра агрегированных данных по полю, что кажется громоздким, и я даже не уверен, как чтобы получить точное значение в каждой строке / столбце. На основании этого примера, есть ли лучший способ достичь этой цели?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Можно сделать crosstab:

pd.crosstab(df['W_L'], df['Direction'],margins=True, margins_name='Total')

Вывод:

Direction  long  short  Total
W_L                          
B/E           0      1      1
Loss          1      2      3
Win           3      1      4
Total         4      4      8
1 голос
/ 29 мая 2020

Используйте pivot_table:

res = pd.pivot_table(df.iloc[:,1:], index=["W_L"], columns=["Direction"], aggfunc="count").droplevel(0, 1)
res["total"] = res.sum(1)

print (res.append(res.sum().rename(index="Trades")))

Direction  long  short  total
W_L                          
B/E         NaN    1.0    1.0
Loss        1.0    2.0    3.0
Win         3.0    1.0    4.0
Trades      4.0    4.0    8.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...