【发布时间】:2020-01-07 12:58:06
【问题描述】:
我有两个数据框,包括从 2009 年到 2019 年所有球队的 NBA 统计数据(30 支球队 * 10 个赛季 = 300 行)。我想通过将第二个 df 中的列添加到合适的 team_stat_by_season 行来加入他们。
唯一适合它们到行的键是“TEAM”和“MIN”。 这就是两个 df 的样子(以大大缩短的方式):
df1:
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
df2:
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
结果应该是这样的:
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(尽管我已经检查了数据类型并且它们都非常适合):
Team MIN PTS FGM AST% REB%
Orlando Magic 48.1 102.8 36.6 NaN NaN
Phoenix Suns 48.5 102.1 38.1 NaN NaN
Indiana Pacers 48.1 100.8 36.8 NaN NaN
Orlando Magic 48.4 103.5 37.5 NaN NaN
我希望有人能在这个问题上帮助我,非常感谢你的帮助!
谢谢!
【问题讨论】:
-
你可以用
on代替left_on/right_on -
检查关键列中的空格和大写/小写的差异。例如用
df1['Team'].str.strip()或df1['Team'].str.upper()解决它们
标签: python pandas dataframe join merge