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

如何在Pandas DataFrame中分离列中两队名并提取非主队名称

解决Pandas DataFrame分离客队名称的方法

核心思路

从text_only_away列中剔除text_only列的主队名称,保留剩余的客队名称,重点处理字符串匹配的边界问题,避免部分匹配导致的错误结果。

具体实现方案

方法1:正则边界匹配替换

利用正则的\b(单词边界)确保只匹配完整的主队名称,避免类似"St."这类后缀被误匹配:

import pandas as pd

# 生成客队名称列
df_games_2023['away_team'] = df_games_2023.apply(
    lambda row: row['text_only_away'].replace(rf"\b{row['text_only']}\b", "").strip(),
    axis=1
)
  • 说明:strip()用于清除替换后残留的首尾空格,保证客队名称格式整洁。

方法2:拆分字符串筛选

如果text_only_away的两个球队名称用固定分隔符(比如" vs ")拼接,可直接拆分后筛选:

# 替换分隔符为实际使用的字符,比如"@"或" vs "
df_games_2023['away_team'] = df_games_2023.apply(
    lambda row: [team for team in row['text_only_away'].split(" vs ") if team != row['text_only']][0],
    axis=1
)
  • 说明:拆分后生成球队列表,直接筛选出不等于主队名称的项,即为客队名称。

方法3:特殊字符兼容处理

如果球队名称包含.、'等特殊正则字符,先转义再匹配,同时清理残留分隔符:

import re

def extract_away_team(row):
    # 转义主队名称中的特殊正则字符
    escaped_home = re.escape(row['text_only'])
    # 替换主队名称并清理空格
    away = re.sub(rf"\b{escaped_home}\b", "", row['text_only_away']).strip()
    # 移除可能残留的分隔符(如"vs ")
    away = re.sub(r"^\s*(vs|VS)\s*", "", away)
    return away

df_games_2023['away_team'] = df_games_2023.apply(extract_away_team, axis=1)

结果验证

运行后可通过以下代码快速检查结果是否符合预期:

print(df_games_2023[['text_only', 'text_only_away', 'away_team']].head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:00:07