2017-05-30 25 views
3

我想獲得數據幀中行的平均值,其中我只使用大於或等於零的值。獲取數據幀中行的平均值大於或等於零

例如: 如果我的數據框看上去像:

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

,如果我得到該行的平均我寫:

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

,並得到:

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]返回其中細胞小於或等於零將與NaN計算mean時被替換和被忽略的數據幀:

df[df > 0].mean(1) 

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

這真是棒極了! 謝謝。謝謝。 – getaglow

2

幾乎沒有簡明扼要@Psidom。但如果你想使用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

相關問題