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

