如何用Pandas基于game_id合并体育赛事数据并生成新列?
用Pandas实现体育赛事数据合并转换
完全可以用Pandas实现这个需求,核心思路是通过**数据透视(pivot)**将同一game_id下的主客场数据合并到同一行,再调整列名匹配期望格式。以下是具体实现步骤和代码:
实现步骤
- 读取CSV数据文件
- 对
game_id分组,按homeAway字段将主客场数据拆分为不同列 - 调整列名格式(如
home_school、away_points) - 重置索引并整理列顺序
- (可选)校验数据完整性,避免异常行影响结果
完整代码示例
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
相关产品推荐
相关产品推荐

