Pandas分组使用agg同时计算均值和方差报错,求代码调整方案
解决方案
你遇到的报错是因为直接在agg()中传入多个字符串参数的写法不符合pandas的API要求。要同时计算分组后的均值和方差,需要用列表包裹聚合函数名称,或者用字典自定义列的聚合规则。
方法一:列表统一指定聚合函数
适用于所有选中列都需要计算相同聚合指标的场景,代码如下:
newdf = df.groupby(['stock_symbol', 'quarter'])['rating_recommend', 'rating_outlook'].agg(['mean', 'var'])
执行后结果的列会是多层索引结构:外层为原列名(rating_recommend、rating_outlook),内层为聚合函数名(mean、var)。
方法二:字典自定义列聚合规则
如果需要针对不同列设置不同聚合逻辑(比如某列仅算均值,另一列算均值+方差),可以用字典明确指定:
newdf = df.groupby(['stock_symbol', 'quarter']).agg( rating_recommend_mean=('rating_recommend', 'mean'), rating_recommend_var=('rating_recommend', 'var'), rating_outlook_mean=('rating_outlook', 'mean'), rating_outlook_var=('rating_outlook', 'var') )
这种方式会生成扁平化的列名,更便于后续直接引用。
报错原因说明
pandas的agg()方法接收多个聚合函数时,要求将它们放在列表或字典这类容器中。直接传入, 'var'会被解析为函数的额外参数,导致pandas误触发numpy相关操作逻辑,进而抛出UnsupportedFunctionCall错误。
内容的提问来源于stack exchange,提问作者Malte Susen
相关产品推荐
相关产品推荐

