Python 我有两个数据帧(DF1)和(DF2)。我想替换(DF2)中与(DF1)的两列上的条件匹配的列的值

Python 我有两个数据帧(DF1)和(DF2)。我想替换(DF2)中与(DF1)的两列上的条件匹配的列的值,python,pandas,Python,Pandas,我想用DataFrame2(DF2)中相应的“工资”填充DataFrame1(DF1)中的“工资”列。这些需要在“团队”和“球员”上匹配 注意: 数据帧是: 大小不一样。 顺序不一样 import pandas as pd #df 1: nba_data = {'Team': ['Mavericks', 'Mavericks', 'Mavericks', '', 'NewYorkKnicks17','Houston Rockets', 'NewYorkKnicks17'],

我想用DataFrame2(DF2)中相应的“工资”填充DataFrame1(DF1)中的“工资”列。这些需要在“团队”和“球员”上匹配

注意:

数据帧是: 大小不一样。 顺序不一样

import pandas as pd


#df 1:

nba_data = {'Team': ['Mavericks', 'Mavericks', 'Mavericks', '', 'NewYorkKnicks17','Houston Rockets', 'NewYorkKnicks17'], 
            'Players': ['Luka Doncic', 'Kristaps Porzingis', 'Jalen Brunson', 'Kristaps Porzingis', 'JR Smith',
                        'James Harden', 'Derrick Rose',],
            'Salary': ['0', '0', '0','0', '0', '0', '0'],
           'Coach': ['Rick Carlisle', 'Rick Carlisle', 'Steve Kerr', 'Phil Jackson', 'Tom Thibideou', '', '']}

nba_df1 = pd.DataFrame(nba_data)

nba_df1


#df2:

nba_data2 = {'Team': ['Mavericks', 'Mavericks', 'Mavericks', 'NewYorkKnicks17', 'NewYorkKnicks17', 'NewYorkKnicks17', 'Houston Rockets'], 
            'Players': ['Luka Doncic', 'Kristaps Porzingis', 'Steph Curry', 'JR Smith', 'Derrick Rose',
                        'Kristaps Porzingis', 'James Harden'],
            'Salary': ['3m', '126m', '0','115m', '0', '20m', '1.5m'],
            'Coach': ['Rick Carlisle', 'Rick Carlisle', 'Steve Kerr', '', 'Tom Thibideou', 'Phil Jackson', '']}


nba_df2 = pd.DataFrame(nba_data2)

nba_df2

所需结果=nba_df1,并填充适当的薪资(运行以下命令):

你的成绩将取决于薪水

编辑: 有点脏,但它可以工作:

agg = pd.merge(nba_df1, nba_df2[['Team', 'Players', 'Salary']], on = ['Players', 'Team'], how = 'left')
agg2 = pd.merge(nba_df1, nba_df2, on = ['Players', 'Coach'], how = 'left')

merge = pd.merge(agg, agg2, on = ['Players', 'Coach'])

merge['Salary'] = merge['Salary_y_x'].fillna(merge['Salary_y_y'])
你的成绩将取决于薪水

编辑: 有点脏,但它可以工作:

agg = pd.merge(nba_df1, nba_df2[['Team', 'Players', 'Salary']], on = ['Players', 'Team'], how = 'left')
agg2 = pd.merge(nba_df1, nba_df2, on = ['Players', 'Coach'], how = 'left')

merge = pd.merge(agg, agg2, on = ['Players', 'Coach'])

merge['Salary'] = merge['Salary_y_x'].fillna(merge['Salary_y_y'])

可能的重复是特定的-这是某种教程@baccandrThat是一个伟大的QnA帖子,只要通过它,你将能够轻松地解决你的问题!看起来是一篇不错的帖子,但说这是一篇重复的帖子是不正确的。如果你把谷歌搜索链接到一本书上,并说如果你只是通过这个,你就可以解决你的问题。我在那篇文章中也没有看到任何问题或情况,所以它似乎不能解决我的问题@baccandr感谢您的链接-可能会在将来派上用场。可能的副本是具体的-这是某种教程@baccandrThat是一个伟大的QnA帖子,只要通过它,你将能够轻松地解决你的问题!看起来是一篇不错的帖子,但说这是一篇重复的帖子是不正确的。如果你把谷歌搜索链接到一本书上,并说如果你只是通过这个,你就可以解决你的问题。我在那篇文章中也没有看到任何问题或情况,所以它似乎不能解决我的问题@baccandr感谢您的链接-将来可能会派上用场。您好@Hamza,第三排的薪水为空。在这里的某个地方,我需要它来匹配['Players','Team]或['Players',Coach'],当第3排没有“Team”时。如果可能的话,你能修改你的答案吗?很多感谢为什么不加入“玩家”呢
agg=pd.merge(nba_-df1,nba_-df2,on=['Players'],how='left')
。他参加的每支球队都不一样。ie:第1行(小牛队| Kristaps Porzingis-工资=126m)。第3行(“'Kristaps Porzingis | Phil Jackson-salary=2000万”)编辑了我的答案,希望它能对shi@Hamza有所帮助,这将第3行的salary留白。在这里的某个地方,我需要它来匹配['Players','Team]或['Players',Coach'],当第3排没有“Team”时。如果可能的话,你能修改你的答案吗?很多感谢为什么不加入“玩家”呢
agg=pd.merge(nba_-df1,nba_-df2,on=['Players'],how='left')
。他参加的每支球队都不一样。ie:第1行(小牛队| Kristaps Porzingis-工资=126m)。而第3行(“| Kristaps Porzingis | Phil Jackson-工资=2000万美元)编辑了我的答案,希望能有所帮助
agg = pd.merge(nba_df1, nba_df2[['Team', 'Players', 'Salary']], on = ['Players', 'Team'], how = 'left')
agg2 = pd.merge(nba_df1, nba_df2, on = ['Players', 'Coach'], how = 'left')

merge = pd.merge(agg, agg2, on = ['Players', 'Coach'])

merge['Salary'] = merge['Salary_y_x'].fillna(merge['Salary_y_y'])