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

如何使用Pandas按类别统计仅含NaN值的ID数量?

问题分析与解法

你的代码逻辑存在偏差,无法得到预期结果——它仅统计了每个Category中存在NaN值的ID数量,但需求是统计该ID在对应Category下所有Score均为NaN的ID数量。比如Category A中的ID1,虽然有NaN的Score记录,但同时存在有效值95,按需求不应被统计,但你的代码会将其纳入计数,导致结果错误。

正确解法

以下是两种实现预期结果的方案:

方案一:分步实现,逻辑清晰

# 1. 按(Category, ID)分组,判断每个分组的Score是否全为NaN
id_full_nan = df.groupby(['Category', 'ID'])['Score'].apply(lambda x: x.isna().all())

# 2. 筛选出符合条件的记录,按Category统计ID数量
result = id_full_nan[id_full_nan].groupby('Category').size().reset_index(name='Count')

# 3. 补全所有原始Category,无符合条件ID的补0
all_cats = df['Category'].unique()
result = result.set_index('Category').reindex(all_cats).fillna(0).astype(int).reset_index()

print(result)

方案二:链式调用,简洁高效

result = (df.groupby(['Category', 'ID'])
          .filter(lambda group: group['Score'].isna().all())
          .groupby('Category')['ID']
          .nunique()
          .reindex(df['Category'].unique(), fill_value=0)
          .reset_index(name='Count'))

print(result)

结果验证

执行上述代码后,会得到你预期的结果:

CategoryCount
A1
B2
C0

内容的提问来源于stack exchange,提问作者CowboyCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:40:51