文档函数展示了如何使用以输出列名为键的dict一次在groupby对象上应用多个函数:
In [563]: grouped['D'].agg({'result1' : np.sum,
.....: 'result2' : np.mean})
.....:
Out[563]:
result2 result1
A
bar -0.579846 -1.739537
foo -0.280588 -1.402938
但是,这只适用于Series groupby对象。当dict类似地通过DataFrame传递给一个组时,它期望键是函数将应用到的列名。
我想做的是将多个函数应用到几个列(但某些列将被多次操作)。还有有些函数将依赖于groupby对象中的其他列(类似sumif函数)。我目前的解决方案是一列一列地查看,执行类似上面代码的操作,对依赖于其他行的函数使用lambdas。但这需要很长时间,(我认为迭代groupby对象需要很长时间)。我将不得不改变它,以便我在一次运行中遍历整个groupby对象,但我想知道在熊猫中是否有一种内置的方式来做这件事,有点干净。
例如,我曾经尝试过
grouped.agg({'C_sum' : lambda x: x['C'].sum(),
'C_std': lambda x: x['C'].std(),
'D_sum' : lambda x: x['D'].sum()},
'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)
但正如预期的那样,我得到了一个KeyError(因为如果agg
从一个DataFrame调用,键必须是一个列)。
是否有任何内置的方式来做我想做的事情,或者这种功能可能会被添加,或者我只需要手动遍历组?