如何在Pandas中按组统计满足另一列条件的单列唯一值
Pandas按分组统计满足Value>0的唯一ID数量
问题说明
按GroupID分组后,仅统计组内Value>0对应的ID唯一值数量;若组内所有Value都是0,统计结果为0。
示例输入
GroupID ID Value ABC TX123 0 ABC TX678 1 ABC TX678 2 DEF AG123 1 DEF AG123 1 DEF AG123 1 GHI TE203 0 GHI TE203 0
期望输出
GroupID UniqueNum ABC 1 DEF 1 GHI 0
当前代码未过滤Value>0的条件,会统计组内所有唯一ID:
count_df = df.groupby(['GroupID'])['ID'].nunique()
解决方法
方法1:先过滤再分组统计
先筛选出Value>0的行,再分组统计唯一ID,最后补全所有分组并填充缺失值为0:
# 筛选符合Value>0的行 filtered = df[df['Value'] > 0] # 分组统计唯一ID数 result = filtered.groupby('GroupID')['ID'].nunique() # 补全所有原始GroupID,缺失项填0 result = result.reindex(df['GroupID'].unique(), fill_value=0).reset_index(name='UniqueNum')
方法2:分组内直接处理
利用groupby.apply在每个分组内筛选Value>0的ID后统计唯一值:
result = df.groupby('GroupID').apply( lambda group: group[group['Value'] > 0]['ID'].nunique() ).reset_index(name='UniqueNum')
结果验证
两种方法均会输出符合预期的结果:
GroupID UniqueNum 0 ABC 1 1 DEF 1 2 GHI 0
内容的提问来源于stack exchange,提问作者sgrimes
相关产品推荐
相关产品推荐

