У меня есть фрейм данных, в котором хранятся ставки на лошадей, причем каждая строка представляет собой новую ставку. Каждая ставка имеет несколько атрибутов, включая местоположение, имя лошади, выигрыши/проигрыши и т. д. Проблема в том, что эти выигрыши по ставкам задаются в виде положительного целого числа, и предоставляется атрибут флага, чтобы сказать, является ли это выигрышем или проигрышем.
Это предоставленный фрейм данных:
Race Course Horse Year Month Date Amount Won/Lost
0 Aintree Red Rum 2017 5 12 11.58 won
1 Punchestown Camelot 2016 12 22 122.52 won
2 Sandown Beef of Salmon 2016 11 17 20.00 lost
3 Ayr Corbiere 2016 11 3 25.00 lost
4 Fairyhouse Red Rum 2016 12 2 65.75 won
5 Ayr Camelot 2017 3 11 12.05 won
6 Aintree Hurricane Fly 2017 5 12 11.58 won
7 Punchestown Beef or Salmon 2016 12 22 112.52 won
8 Sandown Aldaniti 2016 11 17 10.00 lost
9 Ayr Henry the Navigator 2016 11 1 15.00 lost
10 Fairyhouse Jumanji 2016 10 2 65.75 won
11 Ayr Came Second 2017 3 11 12.05 won
12 Aintree Murder 2017 5 12 5.00 lost
13 Punchestown King Arthur 2016 6 22 52.52 won
14 Sandown Filet of Fish 2016 11 17 20.00 lost
15 Ayr Denial 2016 11 3 25.00 lost
16 Fairyhouse Don't Gamble 2016 12 12 165.75 won
17 Ayr Ireland 2017 1 11 22.05 won
И мне нужно создать фрейм данных следующего формата:
Year Total Won Total Lost
2016 €123.45 €678.90
2017 €543.21 €987.60
Я пытался перебирать столбцы, а также пытался использовать функцию where, но, похоже, ничего не работает.
Используйте groupby
, sum
, а затем разложите результат:
df.groupby(['Year', 'Won/Lost'])['Amount'].sum().unstack(-1).add_prefix('total_')
Won/Lost total_lost total_won
Year
2016 115.0 584.81
2017 5.0 69.31
@TomWalsh Ты можешь бежать result.columns.name = None
Также оказалось, что мой исходный код сработал бы, однако в моем csv было дополнительное пустое пространство вокруг значений, что сбрасывало мои поиски.
спасибо, это было намного эффективнее, чем любая из моих попыток, как я могу удалить заголовок выиграл/потерял в верхнем левом углу