【问题标题】:How to find non-zero median/mean of multiple columns in pandas?如何在熊猫中找到多列的非零中位数/平均值?
【发布时间】:2016-08-18 10:36:46
【问题描述】:

我有一长串列,我想一次性计算非零中位数、平均值和标准差。我不能只删除基于 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() 或其他一些函数中优雅地做到这一点?

【问题讨论】:

    标签: python pandas aggregate-functions median summarization


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我应该使用 np.nanmedian 而不是 np.median 吗?
    • 只要你在agg里面使用,你就不需要。 Pandas 将 numpy 函数转换为 pandas 函数,因此 np.median 也忽略了 NaN。两者的结果都是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2020-09-24
    • 2015-07-18
    • 2015-09-11
    相关资源
    最近更新 更多