2017-05-30 27 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

相关问题