2015-12-21 4 views
0

Я потратил часы, выясняя это, но не смог.Группировка суммирования и присоединения в пандах

У меня есть набор данных salaries со следующими columns-

['yearID' 'teamID' 'lgID' 'playerID' 'salary'] 

Он перечисляет зарплату каждого игрока каждой команды каждый год.

У меня есть еще один набор данных teams со следующими columns-

['yearID', 'teamID', 'W'] 

Это список побед (обозначается W) каждой команды каждый год.

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

Я сделал много попыток и потерпел неудачу. Вот один:

  1. Я сгруппировал в salaries набор данных по 'TeamID' и 'yearID'.

  2. Я подвел итоги, чтобы найти общую зарплату команды в конкретный год.

    salariesGrouped = salaries.groupby(['teamID', 'yearID']).sum() 
    
  3. Я попытался ее слиянием с набором данных teams, но это не удалось, потому что salariesGrouped имеет только один столбец, а именно «зарплату».

    pd.merge(salariesGrouped, teams, on=['yearID', 'teamID']) 
    

Что я должен делать?


Образец данных:

Зарплаты:

yearID  teamID  lgID  playerID  salary 
1999   A    X   ABC   100 
1999   A    Y   XXX   900 
2000   B    Z   YYY   300 
2001   A    K   ZZZ   200 

команды:

yearID  teamID  W 
1999   A   20 
2000   B   30 
2001   A   40 
2002   D   10 

Ожидаемый результат:

teamID  yearID  W  salary 
A   1999   20  1000 
      2000   40  200 
B   2000   30  300   

ответ

1

Try в этом решении, то:

Salaries = Salaries.groupby(['yearID','teamID']).sum() 
Salaries = Salaries.reset_index() 

data = pd.merge(df_salaries, df_teams, on=['yearID','teamID']) 
+0

Он возвращает правильную сумму общей зарплаты для каждой команды, но ошибочное количество побед. Победы принадлежат команде и не должны складываться. – Lokesh

+0

Можете ли вы показать нам образец ваших данных и каков желаемый результат? –

+0

Хорошо. Я просто обновил вопрос с образцами данных и желаемым результатом. – Lokesh

0

Будет ли это работать на вас?

teams['Total Salaries'] = list(salariesGrouped.salary) 
+0

Я не думаю, потому что 'teams' имеет 2745 строк, в то время как' salariesGrouped' имеет 828 строк. – Lokesh

Смежные вопросы