如何在pandas pivot_table中统计指定列的唯一值计数
pandas pivot_table 去重统计订单数解决方案
把aggfunc参数中对应ORDER_NUM和ORDER ID的聚合规则从'count'替换为'nunique'即可实现去重计数。
count聚合逻辑:统计分组后该列的非空值总数,不会过滤重复值,因此不符合你的需求nunique聚合逻辑:统计分组后该列的非空唯一值总数,刚好匹配去重后订单数量的统计要求
另外注意你当前代码的values列表中未包含Cost列,但aggfunc中指定了对Cost求和,直接运行会触发KeyError,需要把Cost补充到values列表中。
修改后的完整代码如下:
df1.pivot_table( index=["Unit", "Grade"], values = ["Cost", "QTY","ORDER_NUM", "ORDER ID"], aggfunc={ 'Cost': 'sum', 'QTY':'sum', "ORDER_NUM":'nunique', "ORDER ID":'nunique' } )
如果你需要把空值也计入唯一值统计,可以替换为自定义lambda聚合逻辑,示例如下:
df1.pivot_table( index=["Unit", "Grade"], values = ["Cost", "QTY","ORDER_NUM", "ORDER ID"], aggfunc={ 'Cost': 'sum', 'QTY':'sum', "ORDER_NUM": lambda x: len(x.unique()), "ORDER ID": lambda x: len(x.unique()) } )
内容的提问来源于stack exchange,提问作者alwayzconfused
相关产品推荐
相关产品推荐

