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