如何在 pandas 中查找多个列的非零值 median/mean?

How to find non-zero median/mean of multiple columns in pandas?

我有一长串列,我想一次性计算出非零中位数、均值和标准差。我不能只删除基于 1 列的 0 行,因为同一列中另一列的值可能不是 0。

下面是我目前拥有的计算中位数、均值等的代码,包括零。

    agg_list_oper={'ABC1':[max,np.std,np.mean,np.median],
    'ABC2':[max,np.std,np.mean,np.median],
    'ABC3':[max,np.std,np.mean,np.median],
    'ABC4':[max,np.std,np.mean,np.median],
.....
.....
.....
    }

    df=df_tmp.groupby(['id']).agg(agg_list_oper).reset_index()

我知道我可以编写带有循环的长代码来一次处理一列。 有没有办法在 pandas groupby.agg() 或其他一些函数中优雅地做到这一点?

您可以暂时将 0 替换为 NaN。然后,pandas 将在计算中位数时忽略 NaN。

df_tmp.replace(0, np.nan).groupby(['id']).agg(agg_list_oper).reset_index()