Pandas如何统计player_table球员ID在match_table多列中的出场次数
解法实现
你可以先把match_table中所有主客场球员列的所有值合并成一个一维序列再统计频次,具体实现如下:
步骤1:筛选所有球员列
先把match_table中所有存储player_id的列筛选出来,避免把match_id这类非球员列算进去:
# 两种筛选方式选其一即可 # 方式1:按列名规则匹配,适合列名统一带player关键字的场景 player_cols = [col for col in match_table.columns if "player" in col] # 方式2:手动指定列名,适合列名规则不统一的场景 # player_cols = ["home_player_1", "home_player_2", "away_player_1", "away_player_2"]
步骤2:统计全量球员ID的出现频次
把筛选出的多列球员ID堆叠为一维序列后做频次统计:
id_appear_counts = match_table[player_cols].stack().value_counts()
如果原始
match_table的球员列存在空值,可以在统计前加dropna()过滤:id_appear_counts = match_table[player_cols].stack().dropna().value_counts()
步骤3:映射统计结果到球员表
给player_table新增统计列,未出场的球员默认填充0:
player_table['appearances'] = player_table['player_id'].map(id_appear_counts).fillna(0).astype(int)
运行后即可得到你预期的输出结果。
原理解释
你之前的写法只统计了home_player_1单列的频次,stack()方法可以把选中的多列数据垂直堆叠为一个长Series,相当于把所有球员列的ID都放到同一个序列里,再做value_counts()得到的就是每个ID在所有球员列中的总出现次数。
内容的提问来源于stack exchange,提问作者user17154040
相关产品推荐
相关产品推荐

