2016-12-16 190 views
3

有没有讲述在熊猫​​数据帧的百分比或比赛的数量,而不做一些这样的功能...百分比匹配

len(trace_df[trace_df['ratio'] > 0])/len(trace_df) 
0.189 

len(trace_df[trace_df['ratio'] <= 0])/len(trace_df) 
0.811 

必须有一个更Python或至少优雅的方式做这件事。

回答

9

找到真正列的百分比的最pythonic方法是简单地取布尔表达式的均值。

(trace_df['ratio'] > 0).mean() 
+2

很好。和第二个值1 - (trace_df ['ratio']> 0).mean()' – jezrael

3

泰德的答案很好,当然,只要考虑这个答案就可以了。如果经常存在缺失值,请注意它们也将被视为False,因为熊猫仅跟踪浮点数的缺失值,而不是布尔值。

ser = pd.Series([-1,1,np.nan]) 
(ser > 0).mean() 
0.33333333333333331 

同样,Jezrael做出的好处只有在Ted的答案中没有缺失值时才是正确的。 (在这种情况下,你将有.333 + .333!= 1)

这不一定是错误的(它和你的答案产生的一样),但是如果你缺少值,你可能更喜欢添加一些额外的代码泰德的回答是:

(ser[ser.notnull()] > 0).mean() 
0.5 

我希望这不会是一个挑剔碰到过,不过我认为这是这里值得注意的是,由于mean()默认行为是排除缺失值,但是当你把一个平均值这样的布尔值可以有效地包含缺失值,可能会导致意想不到的结果。