Python 向数据帧中添加一列,该列是来自另一个数据帧的条件和

Python 向数据帧中添加一列,该列是来自另一个数据帧的条件和,python,dataframe,Python,Dataframe,我有两个数据框,一个是棒球队的数据,另一个是队员信息。我需要在团队数据框架中添加一个团队薪资列,该列按年度和团队查找薪资数据,并返回该年度/团队的球员薪资总和。我尝试了许多不同的方法,但我认为我最接近这个方法: def get_team_salary(year, team): data_slice = salary_data_df[(salary_data_df.yearID == year) & (salary_

我有两个数据框,一个是棒球队的数据,另一个是队员信息。我需要在团队数据框架中添加一个团队薪资列,该列按年度和团队查找薪资数据,并返回该年度/团队的球员薪资总和。我尝试了许多不同的方法,但我认为我最接近这个方法:

def get_team_salary(year, team):
    data_slice = salary_data_df[(salary_data_df.yearID == year) & 
                                (salary_data_df.teamID == team)]
    return data_slice['salary'].sum()

#This line of code works correctly without the next function in the code.
#team_data_df['team_salary'] = get_team_salary(2000,'ANA')

def assign_team_salaries(team_data_df):
    year = team_data_df['yearID']
    team = team_data_df['teamID']
    return team_data_df.applymap(get_team_salary(year, team))

team_data_df['team_salary'] = assign_team_salaries(team_data_df)
不起作用的是
assign\u team\u palaries
函数调用。我尝试了很多不同的方法来修复它,并且收到了很多不同的错误消息。您得到的结果是
“ValueError:只能比较标签相同的系列对象”

有人能帮我找出我做错了什么吗?我尝试过完全不同的方法,比如在工资数据上使用
groupby
,然后首先合并两个数据帧,但我也没能让它们起作用。蒂亚

team_data_df
有大量列,但相关列(按顺序)如下所示:

teamID    yearID
2000      ANA
2000      ARI
...       ...
2016      TOR
2016      WSN
salary\u data\u df
有相关列:

teamID   yearID   playerID   salary
2000     ANA      anderga01  3250000
...      ...      ...        ...
2016     WSN      zimmery01  14000000

如您所述,您可以在
薪资数据\u df
上使用
.groupby
,然后将这些总和合并到
团队数据\u df

以以下两个小例子为例:

print(team_data_df)
  teamID  yearID
0      a    2000
1      b    2000
2      c    2000
3      a    2001
4      b    2001
5      c    2001

print(salary_data_df)
   teamID  yearID  playerID  salary
0       a    2000         1     100
1       a    2000         2     200
2       b    2000         4     300
3       b    2000         5     400
4       b    2000         6     500
5       c    2000         7     600
6       a    2001         1     700
7       a    2001         2     800
8       a    2001         3     900
9       b    2001         4    1000
10      b    2001         5    1100
11      c    2001         7    1200
12      c    2001         8    1300
然后:


您可能还需要注意merge的
on
参数。它们模仿类似SQL的合并规范。

非常感谢!这与我尝试的另一种方法类似,但我认为我以前可能错误地处理了索引部分。非常感谢!
sums = (salary_data_df
        .groupby(by=['yearID', 'teamID'])
        .sum()['salary']
        .reset_index())
    # alternative: use parameter `as_index=True` instead of `.reset_index()`

res = team_data_df.merge(sums, on=['yearID', 'teamID'])

print(res)
  teamID  yearID  salary
0      a    2000     300
1      b    2000    1200
2      c    2000     600
3      a    2001    2400
4      b    2001    2100
5      c    2001    2500