2016-08-18 6 views
1

私は非ゼロの中央値を計算したいカラムの長いリストを持っています。平均値は&です。同じ列の別の列の値が0でない可能性があるため、1列に基づいて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() 

私は、一度に1つの列を処理するループで長いコードを書くことができます。 pandas groupby.agg()や他のいくつかの関数をエレガントにする方法はありますか?

答えて

2

一時的に0をNaNに置き換えることができます。次に、パンダはメディアンを計算する間にNaNを無視します。

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

ありがとうございました。 np.medianの代わりにnp.nanmedianを使用する必要がありますか? –

+1

あなたが 'agg'の中でそれを使用している限り、あなたはする必要はありません。 Pandasはnumpy関数をpandas関数に変換するので、 'np.median'はNaNも無視します。結果は両方で同じになります。 – ayhan

関連する問題