2017-05-30 6 views
3

データフレーム内の行の平均値を取得したいと思います。ここでは、ゼロ以上の値しか使用しません。私のデータフレームは、ように見えた場合 :たとえばデータフレームの行の平均をゼロ以上にする

df['mean'] = df.mean(axis = 1) 

をとget:現在

df = pd.DataFrame([[3,4,5], [4,5,6],[4,-10,6]]) 
    3 4 5 
    4 5 6 
    4 -10 6 

私は、行の平均値を取得する場合、私は書く

3 4 5 4 
4 5 6 5 
4 -10 6 0 

私はコンピュータの前にゼロ以上の値しか使わなかったデータフレームを取得したいと思います怒り

3 4 5 4 
4 5 6 5 
4 -10 6 5 

上記の例では-10が平均で除外されています。 -10を除いたコマンドがありますか?

答えて

6

df[df > 0]を使用すると、平均を計算する前にデータフレームを照会できます。

df[df > 0].mean(1) 

#0 4.0 
#1 5.0 
#2 5.0 
#dtype: float64 
+0

これは素晴らしい仕事! ありがとうございます。ありがとうございました。 – getaglow

2

@Psidomほど簡潔なし:df[df > 0]が小さいかゼロに等しい細胞はNaNで置換され、meanを計算する際に無視され得るデータフレームを返します。しかし、もしあなたがnumpyを使い、いくつか追加された迅速さを得たいなら。

v0 = df.values 
v1 = np.where(v0 > 0, v0, np.nan) 
v2 = np.nanmean(v1, axis=1) 
df.assign(Mean=v2) 

    0 1 2 Mean 
0 3 4 5 4.0 
1 4 5 6 5.0 
2 4 -10 6 5.0 

タイミング
小さなデータ

%timeit df.assign(Mean=df[df > 0].mean(1)) 
1000 loops, best of 3: 1.71 ms per loop 

%%timeit 
v0 = df.values 
v1 = np.where(v0 > 0, v0, np.nan) 
v2 = np.nanmean(v1, axis=1) 
df.assign(Mean=v2) 
1000 loops, best of 3: 407 µs per loop 
+1

ありがとうございました! 私のデータセットが非常に大きい時があることを願っています。計算時間を心配する必要があります。あなたの答えは私を冷静に感じさせました。 – getaglow

+0

@getaglow「クール」などの感情を喚起することができるときはいつでも、それを勝利と見なします!お役に立てて嬉しいです。 – piRSquared

関連する問題