在Pandas中使用groupby与agg时,能否同表达式返回count除以sum?
Pandas groupby+agg中直接计算count/sum的方法
当然可以在同一个groupby+agg表达式里返回count除以sum的结果,下面是几种实用的实现方式:
方法一:同时保留count、sum和计算结果
通过字典传入agg参数,自定义每个聚合操作的列名,用lambda函数直接计算分组内的count/sum:
import pandas as pd data=pd.DataFrame({'id':[1,1,1,2,2,3,3,3,3,4, 4], 'val':[10,11,10,13,12,15,12,9, 8, 14, 2]}) result = data.groupby('id')['val'].agg( 计数='count', 求和='sum', 计数除以求和=lambda x: x.count() / x.sum() ) print(result)
执行后会得到包含原聚合列和计算结果列的DataFrame,结果如下:
计数 求和 计数除以求和 id 1 3 31 0.096774 2 2 25 0.080000 3 4 44 0.090909 4 2 16 0.125000
方法二:仅返回count/sum的结果
如果不需要保留count和sum列,可以直接用agg返回计算结果,之后按需重命名列:
result = data.groupby('id')['val'].agg(lambda x: x.count() / x.sum()) # 重置索引并重命名列 result = result.rename('计数除以求和').reset_index()
注意事项
如果分组内的sum为0,会触发除以0的错误,实际使用时可以添加判断逻辑避免异常,比如:
lambda x: x.count()/x.sum() if x.sum() != 0 else 0
内容的提问来源于stack exchange,提问作者Henri
相关产品推荐
相关产品推荐

