2016-12-16 112 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()默認行爲是排除缺失值,但是當你把一個平均值這樣的布爾值可以有效地包含缺失值,可能會導致意想不到的結果。