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

如何用Pandas基于game_id合并体育赛事数据并生成新列?

用Pandas实现体育赛事数据合并转换

完全可以用Pandas实现这个需求,核心思路是通过**数据透视(pivot)**将同一game_id下的主客场数据合并到同一行,再调整列名匹配期望格式。以下是具体实现步骤和代码:

实现步骤

  1. 读取CSV数据文件
  2. 对game_id分组,按homeAway字段将主客场数据拆分为不同列
  3. 调整列名格式(如home_school、away_points)
  4. 重置索引并整理列顺序
  5. (可选)校验数据完整性,避免异常行影响结果

完整代码示例

import pandas as pd

# 1. 读取原始CSV数据
df = pd.read_csv('your_sports_data.csv')

# (可选)校验每个game_id是否恰好包含主客场两行数据
game_row_counts = df['game_id'].value_counts()
invalid_games = game_row_counts[game_row_counts != 2].index.tolist()
if invalid_games:
    print(f"警告:以下game_id的数据行数异常(非2行):{invalid_games}")

# 2. 数据透视:按game_id聚合,homeAway作为列维度,提取school/conference/points字段
pivoted_df = df.pivot(
    index='game_id',
    columns='homeAway',
    values=['school', 'conference', 'points']
)

# 3. 调整列名格式:将多层索引转换为"home_字段名"/"away_字段名"的格式
pivoted_df.columns = pivoted_df.columns.map(lambda x: f"{x[1]}_{x[0]}")

# 4. 重置索引,将game_id从索引转为普通列,并整理列顺序匹配期望格式
desired_columns = [
    'game_id', 'home_school', 'home_conference', 'home_points',
    'away_school', 'away_conference', 'away_points'
]
final_df = pivoted_df.reset_index()[desired_columns]

# 5. 输出结果或保存到新CSV
print(final_df)
final_df.to_csv('transformed_sports_data.csv', index=False)

代码说明

  • pivot()函数是核心:通过index='game_id'指定聚合主键,columns='homeAway'将主客场数据拆分为列维度,values指定需要保留的字段
  • 列名映射:利用map()将透视后的多层列索引(如('school', 'home'))转换为home_school的格式
  • 数据校验:提前检查异常game_id,避免因数据缺失或重复导致转换结果错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:57:35