DataFrame agg聚合使用带if else的lambda函数触发ValueError如何解决
错误原因
groupby分组后传入lambda的参数x是对应分组的Sales列的Series序列,不是单个数值:
直接执行x>7得到的是和x长度相同的布尔Series,而if语句需要的是单个布尔值来判断分支走向,无法直接对布尔Series做真假判断,因此抛出该错误。
修正方案
根据你要实现的逻辑二选一即可:
方案1:判断分组总和是否大于7,符合则返回总和否则返回0
如果你的逻辑是「分组的销售额总金额大于7就返回总金额,否则返回0」,修改代码如下,运行结果和你给出的预期输出完全一致:
import numpy as np df.groupby('States').agg({ 'Sales': lambda x: np.sum(x) if np.sum(x) > 7 else 0 })
方案2:只对分组内大于7的销售额求和
如果你的逻辑是「仅统计分组内大于7的销售额的总和」,修改代码如下:
df.groupby('States').agg({ 'Sales': lambda x: np.sum(x[x > 7]) })
内容的提问来源于stack exchange,提问作者geoabram
相关产品推荐
相关产品推荐

