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

Python中基于分组计算创建新DataFrame报错问题求助

解决方案

你的问题出在构造字典时,df.groupby(['Season'])是GroupBy对象,不是具体的赛季标签值,没法直接用来生成DataFrame的列。下面是两种简洁且正确的实现方式:

方法一:分步计算后合并

先分别计算所需统计量,再合并为DataFrame并计算场均值:

import pandas as pd

# 计算每个赛季的总尝试次数(每行是一次尝试,size()即总次数)
fg_counts = df.groupby('Season').size().rename('FG')
# 计算每个赛季的唯一比赛数
game_counts = df.groupby('Season')['GameID'].nunique().rename('Games')

# 合并两个统计Series,重置索引将Season转为列并改名为Year
result_df = pd.concat([fg_counts, game_counts], axis=1).reset_index().rename(columns={'Season': 'Year'})
# 计算场均尝试数
result_df['Avg_FG_Per_Game'] = result_df['FG'] / result_df['Games']

方法二:用agg()一次性完成分组统计

更高效的写法,通过groupby.agg()一次性定义所有统计规则:

import pandas as pd

result_df = df.groupby('Season').agg(
    FG=('GameID', 'size'),  # 总尝试次数,用任意列的size都可以,这里选GameID不影响结果
    Games=('GameID', 'nunique')
).reset_index().rename(columns={'Season': 'Year'})

# 添加场均尝试数列
result_df['Avg_FG_Per_Game'] = result_df['FG'] / result_df['Games']

两种方法最终都会生成包含Year(赛季)、FG(总尝试次数)、Games(比赛数)、Avg_FG_Per_Game(场均尝试数)的DataFrame,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:31:02