如何在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
相关产品推荐
相关产品推荐

