我有两个足球信息的数据框:
matches
:单个匹配的信息。包含进行比赛的联赛ID、比赛日期、比赛赛季的列,并有22列球员ID(home_player_1
、home_player_2
、...home_player_11
,away_player_1
,away_player_2
,...away_player11
),用于开始比赛的每个玩家。player_attributes
:随时间记录的单个玩家的属性信息。每个球员在每个赛季都有多个记录,因此每行都有一个date
列,指示该行中的数据是何时记录的。这很重要,因为这意味着玩家ID列不是唯一索引。
我想在球员属性数据框中添加一个league_id
列,这样我就可以知道在记录该行中的特定属性时,球员处于哪个联赛。
到目前为止我所做的:
- 基于每行
date
列中的值,在播放器属性df中添加season
列 - 创建了一个新的
player_matches
df,列为match_id
,player_id
,season
,league_id
。这个df中的每个match id都显示在22行中(一行表示开始比赛的每个球员的id)。
我使用这个player_matches
df的目的是通过将球员id和赛季匹配到player_matches
行,然后使用该行的联赛id值,来找到球员属性表中每行的联赛id。问题是我还没有找到一个有效的方法来做到这一点。球员属性df包含121 k行,球员匹配表包含321 k行,所以普通的简单索引/掩码/合并不起作用。我试着这样使用apply
:
def get_league_id(row):
player_api_id = row['player_api_id']
season = row['season']
match_row = player_matches[(player_matches['player_api_id'] == player_api_id) & (player_matches['season'] == season)].iloc[0]
league_id = match_row['league_id']
return league_id
player_attributes.apply(get_league_id, axis=1)
然而,这给出了错误:“索引错误:单个位置索引器越界”。我注意到错误直到第13行才发生,所以基本上这段代码player_attributes.head(12).apply(get_league_id, axis=1)
可以工作。
知道为什么会出现这个错误吗?或者你有一个替代的方法,将工作?
1条答案
按热度按时间zaqlnxep1#
事实证明,实际上有一个有效的合并操作!:)
基本上,这是保留
player_attributes
中的所有行,并连接player_matches
中共享相同player_id
和season
的行。这将从player_matches
中的行添加league_id
。