在Python Pandas中使用聚合函数时如何忽略值0?

How to ignore value 0 during using aggregation function in Python Pandas?

我在 Python Pandas 中有数据框,如下所示:

product   | age
------------
A  | 22
B  | 0 
B  | 38
B  | 0
A  | 11

我需要通过以下代码对其进行聚合:

df.groupby("product").agg(mean_age = ("age","mean))

但是第二行 0 肯定会降低我的平均年龄,我可以修改上面的代码来定义我不想考虑年龄为 0 的行吗?

如何在 Python Pandas 中做到这一点?

使用 replace() 将 0 转换为 NaN 然后 groupby() 并聚合:

df.replace(0,float('NaN')).groupby("product").agg(mean_age = ("age","mean"))

过滤掉不为0的行,然后使用groupby:

df[df['age'].ne(0)].groupby("product").agg(mean_age = ("age","mean"))

如果需要将特定列的 0 替换为 NaN,请使用:

(df.assign(age=df['age'].replace(0,float('NaN')))
    .groupby("product").agg(mean_age = ("age","mean")))