Python 我想在多个键上连接两个数据帧,并将第二个数据帧附加到合适的行中

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

我有两个数据框,包括2009年至2019年所有球队的NBA统计数据(30支球队*10个赛季=300行)。我想通过将第二个df中的列添加到合适的team_stat_by_season行来加入他们

唯一适合于行的键是“TEAM”和“MIN”。 这就是这两个df的样子(以一种缩短得多的方式):

结果应该如下所示:

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