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

如何在DataFrame中拆分字符串、去空格并explode处理大学篮球赛程数据

解决方案

步骤拆解与代码实现

要完成你的需求,需要分三步处理:清理球队排名并拆分主客场、展开记录、仅保留首条记录的比赛时间。以下是完整实现代码:

import pandas as pd

# 示例原始数据(替换为你的实际DataFrame)
df = pd.DataFrame({
    'Matchup': ['#15 Marquette at #12 Creighton', '#8 Kansas at #1 Duke'],
    'Time': ['7:00 PM', '9:00 PM']
})

# 1. 清理排名标记+拆分主客场+去除空格
# 用正则移除#开头的排名(如#15 ),拆分主客场后清理前后空格
df[['away', 'home']] = df['Matchup'].str.replace(r'#\d+\s', '', regex=True).str.split(' at ', n=1, expand=True)
df['away'] = df['away'].str.strip()
df['home'] = df['home'].str.strip()

# 2. 将主客场转为列表,方便explode展开
df['team'] = df[['away', 'home']].values.tolist()

# 3. 处理时间字段:仅保留每组首条记录的时间
df['row_id'] = df.index  # 给原始行添加唯一ID用于分组
df = df.explode('team')
# 生成每组内的序号,仅序号为0的保留时间,其余设为缺失值
df['seq'] = df.groupby('row_id').cumcount()
df['Time'] = df['Time'].where(df['seq'] == 0, pd.NA)

# 清理冗余列
df = df.drop(columns=['Matchup', 'away', 'home', 'row_id', 'seq'])

代码说明

  • 清理排名与拆分:使用正则表达式#\d+\s精准匹配并移除球队排名(如#15 ),再通过str.split(' at ', n=1)拆分主客场,最后用str.strip()清理字符串前后空格。
  • 展开记录:将处理后的主客场球队转为列表,用explode展开成独立行。
  • 保留首条时间:通过原始行ID分组,用cumcount()生成组内序号,仅保留序号为0的记录的时间值,其余设为pd.NA(可根据需求改为空字符串)。

输出示例

team     Time
0  Marquette  7:00 PM
0  Creighton     <NA>
1     Kansas  9:00 PM
1       Duke     <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:39:22