You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何不分组按另一列去重计数计算指定列平均值

pandas 实现 sum(A)/count(distinct B) 计算逻辑的规范方案

你当前的实现逻辑是成立的,只需要把手动计算唯一值长度的部分替换为pandas原生接口,就可以得到更严谨、更符合pandas设计规范的写法,全程不需要使用groupby操作,也可以直接输出你要求的仅含目标列、单行存储结果的DataFrame。

核心优化点

  • 替换唯一值计数逻辑:你当前使用的len(df['CustomerID'].unique())可以替换为pandas内置的Series.nunique()方法,这是官方专门提供的唯一值计数接口,默认自动排除空值,性能和鲁棒性都优于手动取unique()后计算长度的写法。
  • 结果格式适配:直接通过DataFrame构造方法包装计算结果,即可得到符合要求的输出结构。

完整实现代码

首先复现你的样例数据:

import pandas as pd

df = pd.DataFrame({
    'OrderQuantity': [10, 9, 8, 14, 3],
    'CustomerID': [1214, 1214, 1213, 1213, 1213]
})

核心计算逻辑:

# 计算逻辑:sum(OrderQuantity) / count(distinct CustomerID)
result = pd.DataFrame({
    'OrderQuantity': [df['OrderQuantity'].sum() / df['CustomerID'].nunique()]
})

输出的result结果如下,完全符合你要求的格式:

OrderQuantity
0           22.0

参数说明

如果你的分类列(示例中的CustomerID)存在空值,且业务上需要将空值视为一个独立分类参与计数,可以给nunique()传入dropna=False参数,即写为df['CustomerID'].nunique(dropna=False),该场景下默认的len(unique())写法虽然也会将NaN计为一个值,但不支持灵活调整是否排除空值,适配性弱于原生接口。

内容的提问来源于stack exchange,提问作者Judy T Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:12:58