Python 我想在多个键上连接两个数据帧,并将第二个数据帧附加到合适的行中
我有两个数据框,包括2009年至2019年所有球队的NBA统计数据(30支球队*10个赛季=300行)。我想通过将第二个df中的列添加到合适的team_stat_by_season行来加入他们 唯一适合于行的键是“TEAM”和“MIN”。 这就是这两个df的样子(以一种缩短得多的方式): 结果应该如下所示:Python 我想在多个键上连接两个数据帧,并将第二个数据帧附加到合适的行中,python,pandas,dataframe,join,merge,Python,Pandas,Dataframe,Join,Merge,我有两个数据框,包括2009年至2019年所有球队的NBA统计数据(30支球队*10个赛季=300行)。我想通过将第二个df中的列添加到合适的team_stat_by_season行来加入他们 唯一适合于行的键是“TEAM”和“MIN”。 这就是这两个df的样子(以一种缩短得多的方式): 结果应该如下所示: Team MIN PTS FGM AST% REB% Orlando Magic 48
Team MIN PTS FGM AST% REB%
Orlando Magic 48.1 102.8 36.6 1.54 49.8
Phoenix Suns 48.5 102.1 38.1 1.61 52.9
Indiana Pacers 48.1 100.8 36.8 1.81 50.9
Orlando Magic 48.4 103.5 37.5 1.70 50.6
我使用以下代码进行了尝试:
df_merged = pd.merge(left=df1,right=df2, how='left', left_on=['TEAM','MIN'], right_on=['TEAM','MIN'])
但不幸的是,在某些部分它总是返回NaN(尽管我已经检查了数据类型,它们都非常适合):
我希望有人能在这个问题上帮助我,我会非常感谢你的帮助
谢谢 您是否尝试过使用完全外部联接,这将提供您需要的结果 将此保存为df2.csv
Team,MIN,AST%,REB%
Phoenix Suns,48.5,1.61,52.9
Orlando Magic,48.1,1.54,49.8
Orlando Magic,48.4,1.70,50.6
Indiana Pacers,48.1,1.81,50.9
将此文件保存为df1.csv
Team,MIN,PTS,FGM
Orlando Magic,48.1,102.8,36.6
Phoenix Suns,48.5,102.1,38.1
Indiana Pacers,48.1,100.8,36.8
Orlando Magic,48.4,103.5,37.5
下面是代码
df1 = pd.read_csv("df1.csv")
df2 = pd.read_csv("df2.csv")
pd.merge(df1, df2, how='outer', on=['Team','MIN'])
下面是输出
Team MIN PTS FGM AST% REB%
0 Orlando Magic 48.1 102.8 36.6 1.54 49.8
1 Phoenix Suns 48.5 102.1 38.1 1.61 52.9
2 Indiana Pacers 48.1 100.8 36.8 1.81 50.9
3 Orlando Magic 48.4 103.5 37.5 1.70 50.6
差不多了:)您需要在拼写“Team”时保持一致:它在您的数据帧中都是大写的,但在join中不是
有以下几点
pd.merge(left=df1,right=df2, how='left', on=['Team','MIN'])
你会得到
Team MIN PTS FGM AST% REB%
0 Magic 48.1 102.8 36.6 1.54 49.8
1 Suns 48.5 102.1 38.1 1.61 52.9
2 Pacers 48.1 100.8 36.8 1.81 50.9
3 Magic 48.4 103.5 37.5 1.70 50.6
您可以使用上的
而不是
上的左\右\检查键列中的空格和大小写差异。例如,使用df1['Team'].str.strip()
或df1['Team'].str.upper()
解决这些问题谢谢您的回复!但是如果我使用外部连接,结果是这样的:Team MIN PTS FGM AST%REB%
奥兰多魔术48.1 102.8 36.6楠楠凤凰太阳48.5 102.1 38.1楠楠印第安纳步行者48.1 100.8 36.8楠楠楠楠奥兰多魔术48.4 103.5 37.5楠楠楠楠凤凰太阳队48.5楠楠楠楠1.61 52.9奥兰多魔术队48.1楠楠楠楠楠1.54 49.8奥兰多魔术队48.4楠楠楠楠1.70 50.6
对不起,我刚刚加入了stackoverflow,我不知道如何在评论部分显示上面的数据帧。。但问题是df2的行附加在df1的底部。但我要寻找的是将df2的每一行附加到适当行的末尾,以便连接的df的行数与df1的行数相同。你能帮我吗?顺便说一下,非常感谢!
pd.merge(left=df1,right=df2, how='left', on=['Team','MIN'])
Team MIN PTS FGM AST% REB%
0 Magic 48.1 102.8 36.6 1.54 49.8
1 Suns 48.5 102.1 38.1 1.61 52.9
2 Pacers 48.1 100.8 36.8 1.81 50.9
3 Magic 48.4 103.5 37.5 1.70 50.6