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

批量处理NBA赛季球员统计DataFrame的技术问询

完整解决方案

1. 定义单DataFrame处理函数

先封装一个处理单赛季DataFrame的函数,把所有操作整合进去,逻辑清晰且便于批量复用:

import pandas as pd

def process_nba_season_df(df):
    # 步骤1:转换MP列数据类型(处理千分位逗号+转int)
    df['MP'] = df['MP'].str.replace(',', '').astype(int)
    
    # 步骤2:去重Rk并保留TOT汇总行,再筛选MP≥1000的记录
    # 标记是否为TOT汇总行,方便排序优先保留
    df['is_tot'] = df['Team'] == 'TOT'
    # 按球员编号分组,优先保留TOT行;无TOT则保留单队记录
    df_unique = df.sort_values(by=['Rk', 'is_tot'], ascending=[True, False])\
                  .groupby('Rk').first().reset_index()
    # 筛选出场时长达标记录,清理临时标记列
    df_filtered = df_unique[df_unique['MP'] >= 1000].drop(columns='is_tot')
    
    # 步骤3:列间代数运算
    # 新增球员级衍生列(如每分钟得分)
    df_filtered['PTS_per_MP'] = df_filtered['PTS'] / df_filtered['MP']
    # 计算赛季级汇总指标(可按需扩展)
    season_summary = {
        'total_pts_per_total_mp': df_filtered['PTS'].sum() / df_filtered['MP'].sum(),
        'avg_pts_per_player': df_filtered['PTS'].sum() / len(df_filtered)
    }
    
    return df_filtered, season_summary

2. 批量处理DataFrame列表

之前循环修改无效,大概率是没把处理后的结果重新赋值回列表,用循环+列表存储即可解决:

# 假设你的原始DataFrame列表是df_list
processed_seasons = []
season_summaries = []

for raw_df in df_list:
    cleaned_df, summary = process_nba_season_df(raw_df)
    processed_seasons.append(cleaned_df)
    season_summaries.append(summary)

# processed_seasons就是处理完成的16个赛季DataFrame
# season_summaries对应每个赛季的汇总统计值

关键细节说明

  • MP类型转换:兼容NBA数据里常见的千分位逗号格式(如"1,500"),避免转换时报错;如果你的数据没有逗号,可去掉str.replace(',', '')。
  • 去重逻辑:通过排序让TOT汇总行排在同球员记录的最前面,再按球员编号分组取第一行,确保多队效力的球员只保留汇总数据;单队球员则保留唯一记录。
  • 批量处理有效性:通过循环将处理后的DataFrame存入新列表,避免原始列表未更新的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:15:43