如何在Pandas的.agg()方法中为var函数传递ddof参数?
在pandas的agg()中指定var的ddof=0的方法
好问题!要在agg()方法里给var函数设置ddof=0,你只需要把原来的字符串'var'替换成带指定参数的自定义函数即可,这里有两种实用的方案:
方案1:使用lambda函数(直观快捷)
直接在agg()的字典值里用lambda函数调用var(ddof=0),如果需要自定义列名,还可以用元组来指定名称:
import pandas as pd # 你的原有代码部分 categorize_data = dataset['dayNumber'].between(1, 7) grouped_priority = dataset[categorize_data].groupby('priority') # 修改后的agg调用,指定ddof=0 result = grouped_priority.agg({ 'serviceTime': [('var_ddof0', lambda x: x.var(ddof=0)), 'mean'], 'travelTime': [('var_ddof0', lambda x: x.var(ddof=0)), 'mean'] }).reset_index()
这里用('var_ddof0', lambda...)的形式,能让生成的DataFrame列名更清晰,避免默认的<lambda>标识。如果不在意列名,也可以直接写lambda x: x.var(ddof=0)。
方案2:使用functools.partial(适合重复使用)
如果需要在多个地方用到ddof=0的方差计算,可以用partial预先绑定参数,让代码更整洁:
import pandas as pd from functools import partial # 预先定义一个固定ddof=0的方差函数 var_ddof0 = partial(pd.Series.var, ddof=0) # 原有代码部分 categorize_data = dataset['dayNumber'].between(1, 7) grouped_priority = dataset[categorize_data].groupby('priority') # 调用agg时直接使用自定义函数 result = grouped_priority.agg({ 'serviceTime': [var_ddof0, 'mean'], 'travelTime': [var_ddof0, 'mean'] }).reset_index()
为什么直接传'var'不行?
当你在agg()里传字符串'var'时,pandas会调用默认参数的pd.Series.var()方法,而它的ddof默认值是1。要覆盖这个参数,必须显式传递一个带指定参数的函数,而不是字符串别名。
内容的提问来源于stack exchange,提问作者Aman Swarnkar
相关产品推荐
相关产品推荐

