使用pandas groupby与agg时遇报错及语法疑问求助
错误修复与原理解析
1. "out parameter not supported" 错误修复
你遇到的报错是因为直接将多个numpy函数作为位置参数传给agg()时,pandas会尝试向这些numpy函数传递out参数,但numpy的统计函数(如np.min)在pandas的分组聚合场景下不支持这个参数。
修复方法很简单:把需要使用的numpy函数放进列表里传给agg(),而不是逐个作为位置参数传递。修改后的代码如下:
# Import numpy with the alias np import numpy as np import pandas as pd # The DataFrame "sales" is already implemented # 修复第一处聚合代码 sales_stats = sales.groupby("type")["weekly_sales"].agg([np.min, np.max, np.mean, np.median]) # Print sales_stats print(sales_stats) # 修复第二处聚合代码 unemp_fuel_stats = sales.groupby("type")["unemployment","fuel_price_usd_per_l"].agg([np.min, np.max, np.mean, np.median]) # Print unemp_fuel_stats print(unemp_fuel_stats)
如果想给聚合后的列名设置更友好的名称,也可以用字典格式指定:
sales_stats = sales.groupby("type")["weekly_sales"].agg( min_sales=np.min, max_sales=np.max, mean_sales=np.mean, median_sales=np.median )
2. 为什么agg()中不需要给函数加括号?
agg()方法需要接收的是可调用的函数对象,而不是函数执行后的结果:
- 如果你给函数加了括号(比如
np.min()),Python会立即执行这个函数,此时没有传入要计算的数据,要么报错,要么得到一个无意义的结果,无法被agg()用来处理分组后的数据。 - 直接传递函数名(如
np.min),其实是把这个函数本身作为参数传给agg(),让pandas在处理每个分组的子数据集时,自动调用这个函数并传入对应的数据,完成统计计算。
内容的提问来源于stack exchange,提问作者Manuel Veiga
相关产品推荐
相关产品推荐

