You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中拆分分号分隔列并复制行以统计球员数据?

问题描述

我有如下结构的Pandas DataFrame:

play_by_play = pd.DataFrame([{
    "players": "Tom Brady; Mike Evans; Tristan Wirfs; Leonard Fournette; Chris Godwin", 
               "down": 1, 
               "to_go": 10,
                "play_type": 'pass',
               "yards_gained": 8,
               "pass_attempt": 1,
               "complete_pass": 1,
               "rush_attempt": 0
              }])

我希望通过group by和聚合函数统计球员在场上的各项数据。手动单球员统计可使用play_by_play["players"].str.contains("Tom Brady")过滤后聚合,但我需要实现自动化处理。目前设想的方案是拆分"players"列,将每个球员对应为单独一行,其他列数据保持不变,最终效果如下:

playerdownto_goplay_typeyards_gainedpass_attemptcomplete_passrush_attempt
"Tom Brady"110pass8110
"Mike Evans"110pass8110
"Tristan Wirfs"110pass8110
"Leonard Fournette"110pass8110
"Chris Godwin"110pass8110

请问如何实现该需求?此方案需支持数千行数据的可扩展性,若有更简便的按分号分隔列中的唯一值分组的方法,也欢迎采用。

解决方案

方法一:拆分players列并展开行(推荐,高效支持大数据量)

使用Pandas的str.split结合explode方法,一步完成拆分和行展开,该方法性能优异,适合数千行甚至更大规模的数据:

# 拆分players列,按分号+空格分割生成列表
play_by_play['player'] = play_by_play['players'].str.split('; ')
# 展开列表,每个球员对应一行,其余列保留原数据
expanded_df = play_by_play.explode('player').drop('players', axis=1)

执行后expanded_df就是目标格式,之后可直接按player列分组聚合:

# 示例:按球员统计各项数据总和
player_stats = expanded_df.groupby('player').agg({
    'down': 'count',  # 统计出场次数
    'yards_gained': 'sum',
    'pass_attempt': 'sum',
    'complete_pass': 'sum',
    'rush_attempt': 'sum'
}).reset_index()

方法二:处理不规范分隔符的兼容方案

如果players列的分隔符不统一(比如存在仅分号无空格的情况),可以先清洗数据再拆分:

# 先去除球员名前后空格,再拆分
play_by_play['player'] = play_by_play['players'].str.split(';').apply(lambda x: [p.strip() for p in x])
expanded_df = play_by_play.explode('player').drop('players', axis=1)

注意事项

  • explode方法要求Pandas版本在0.25及以上,若版本较低,可使用以下代码替代(性能略逊):
expanded_df = play_by_play.assign(player=play_by_play['players'].str.split('; ')).apply(pd.Series.explode)

内容的提问来源于stack exchange,提问作者jwald3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:50:31