Как суммировать первые значения результата groupby и записать это в виде столбца df в соответствующей группе - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть фрейм данных, который выглядит следующим образом (см. Ниже):

Player Name         Team                    PlayerMarketValue

Steph Curry         Golden State Warriors   169027.4782
Steph Curry         Golden State Warriors   169027.4782
Steph Curry         Golden State Warriors   169027.4782
Steph Curry         Golden State Warriors   169027.4782
Lebron James        All Stars               120896.3772
Lebron James        All Stars               120896.3772
Lebron James        All Stars               120896.3772
Luka Doncic         All Stars               36789.6562
Luka Doncic         All Stars               36789.6562
Luka Doncic         All Stars               36789.6562

Я пытаюсь найти хороший способ сгруппировать как Team, так и PlayerName, и из этого взятьпервый экземпляр PlayerMarketValue, а затем сложите его и запишите это значение через соответствующее ему Team.

Я попал в блок после получения:

NBAData['TotalTeamVal'] = NBAData.groupby(['Team', 'Player Name'])['PlayerMarketValue'].first().sum()

То есть: я ищу (обратите внимание на строки All Stars в частности):

enter image description here

Ответы [ 3 ]

1 голос
/ 23 сентября 2019

Вы можете сгруппировать команду на новом фрейме данных, получить общее значение и объединить обратно:

df.merge(df.groupby(['Player Name', 'Team'])
           .PlayerMarketValue.first()
           .groupby(['Team']).sum(),
         left_on='Team',
         right_index=True,
         suffixes=('','Total')
)
1 голос
/ 23 сентября 2019

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

  1. удалять дублирующиеся строки, связанные с каждым игроком
  2. суммирует значения игроков в команде
  3. сбрасывает индекс и объединяет все обратно с основным DataFrame, используя столбцы команд в качестве ключа
pd.merge(df, 
         df.drop_duplicates('Player Name').groupby(['Team'])['PlayerMarketValue'].sum().reset_index(), 
         on='Team', 
         suffixes= ['', '_Team']
         )
0 голосов
/ 23 сентября 2019

Вы можете попробовать метод, указанный ниже.Я надеюсь, что это поможет вам.

NBAData=NBAData.groupby(["Player_name","Team"]).first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...