分析pandas中nunique_counts原实现与简化版的差异及NaN影响
原函数的实际作用分析
核心逻辑拆解
原实现的两步流程等价于以下逻辑:
- 自动过滤掉c列值为NaN的所有行(
pandas的groupby会默认排除分组键中包含NaN的行) - 对过滤后的数据集,按
['a','b','c']分组统计行数(这一步的count列属于中间产物,不影响最终唯一值统计结果) - 基于上述已排除c为NaN行的分组结果,按
a列统计目标col的唯一值数量
与简化版的差异原因
简化版df.groupby('a')[col].nunique()的逻辑是:
- 对所有行(包含c列值为NaN的行)直接按
a分组,统计col的唯一值数量
因为原实现提前排除了c为NaN的行,若这些被排除的行中存在col的新值(即未在c非NaN行中出现过的值),就会导致简化版统计的唯一值数量≥原实现的结果。
等价代码还原
原函数的实际作用可以用以下代码准确还原:
# 先过滤c列非NaN的行 filtered_df = df[df['c'].notna()] # 按a分组统计col的唯一值数量 original_result = filtered_df.groupby('a')[col].nunique()
内容的提问来源于stack exchange,提问作者jinkins
相关产品推荐
相关产品推荐

