【发布时间】:2022-01-04 14:34:37
【问题描述】:
我正在尝试合并 2 个数据帧,但在弄清楚如何合并时遇到了问题,因为它不是直截了当的。 一个数据框有超过 25000 场比赛的匹配结果,看起来像这样。 第二个具有团队绩效指标,但仅适用于大约 1500 场比赛。 由于我还不能发布图片,这里是感兴趣的列名:
df_match['date', 'home_team_api_id', 'away_team_api_id']
df_team_attributes['date', 'team_api_id']
两个数据框都有额外的列,其中包含结果或性能指标。 为了能够正确合并,我需要按日期合并,并查看“team_api_id”是否匹配“home...”或“away_team_api_id”
这是我到目前为止所尝试的:
df_team_performance = pd.merge(df_team_attributes, df_match,
how = 'left',
left_on = ['date', 'team_api_id', 'team_api_id'],
right_on = ['date', 'home_team_api_id', 'home_team_api_id'])
我也尝试过只有 2 列,但没有成功。 我想要得到的是一个新的数据框,其中只有 df_team_attributes 的行和两个数据框的列。 提前谢谢!
根据 Correlien 的要求添加:
print(df_match[['date', 'home_team_api_id', 'away_team_api_id', 'win_home', 'win_away', 'draw', 'win']].head(10).to_dict()) 的输出
{'日期':{0:'2008-08-17 00:00:00',1:'2008-08-16 00:00:00',2:'2008-08-16 00:00:00' , 3: '2008-08-17 00:00:00', 4: '2008-08-16 00:00:00', 5: '2008-09-24 00:00:00', 6: '2008 -08-16 00:00:00',7:'2008-08-16 00:00:00',8:'2008-08-16 00:00:00',9:'2008-11-01 00 :00:00'}, 'home_team_api_id': {0: 9987, 1: 10000, 2: 9984, 3: 9991, 4: 7947, 5: 8203, 6: 9999, 7: 4049, 8: 10001, 9: 8342}, 'away_team_api_id': {0: 9993, 1: 9994, 2: 8635, 3: 9998, 4: 9985, 5: 8342, 6: 8571, 7: 9996, 8: 9986, 9: 8571}, ' win_home':{0:0、1:0、2:0、3:1、4:0、5:0、6:0、7:0、8:1、9:1},'win_away':{ 0:0、1:0、2:1、3:0、4:1、5:0、6:0、7:1、8:0、9:0},'画':{0:1, 1:1, 2:0, 3:0, 4:0, 5:1, 6:1, 7:0, 8:0, 9:0}, ‘win’: {0:0, 1:0, 2:1、3:1、4:1、5:0、6:0、7:1、8:1、9:1}}
print(df_team_attributes[['date', 'team_api_id', 'buildUpPlaySpeed', 'buildUpPlaySpeedClass']].head(10).to_dict()) 的输出
{'日期':{0:'2010-02-22 00:00:00',1:'2014-09-19 00:00:00',2:'2015-09-10 00:00:00' , 3: '2010-02-22 00:00:00', 4: '2011-02-22 00:00:00', 5: '2012-02-22 00:00:00', 6: '2013 -09-20 00:00:00',7:'2014-09-19 00:00:00',8:'2015-09-10 00:00:00',9:'2010-02-22 00 :00:00'}, 'team_api_id': {0: 9930, 1: 9930, 2: 9930, 3: 8485, 4: 8485, 5: 8485, 6: 8485, 7: 8485, 8: 8485, 9: 8576}, 'buildUpPlaySpeed': {0:60, 1:52, 2:47, 3:70, 4:47, 5:58, 6:62, 7:58, 8:59, 9:60}, ' buildUpPlaySpeedClass':{0:'平衡',1:'平衡',2:'平衡',3:'快速',4:'平衡',5:'平衡',6:'平衡',7:'平衡', 8: '平衡', 9: '平衡'}}
【问题讨论】:
-
请使用
print(df_match[['date', 'home_team_api_id', 'away_team_api_id']].head(10).to_dict())和print(df_team_attributes[['date', 'team_api_id']].to_dict())的输出更新您的帖子,以便您的代码可重现。