2017-10-28 81 views
0

假設我有一個DataFrame,其中包含一列A,其中只包含值'foo''bar',我想計算foo s的分數。要做到這一點的方法之一是使用布爾選擇與__len__共同發揮作用:如何獲得熊貓系列中某個特定值的分數?

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 
          'foo', 'bar', 'foo', 'foo'], 
        'B' : ['one', 'one', 'two', 'three', 
          'two', 'two', 'one', 'three'], 
        'C' : np.random.randn(8), 
        'D' : np.random.randn(8)}) 

assert len(df[df['A'] == 'foo'])/len(df) == 0.625 

不過,我覺得這也可以在使用groupbycountpandas -native的方式來完成。例如,

print(df.groupby('A').count()/len(df)) 

產生

  B  C  D 
A      
bar 0.375 0.375 0.375 
foo 0.625 0.625 0.625 

什麼是進行推薦的方法是什麼?我是否在任何欄目中選擇foo

+1

另外'DF [ 'A']等式( '富')的意思是()'? – Zero

+0

如果性能是一個需求,在'np.ndarray'上運行也可能會更快,使用類似'(df.A.values =='foo')。mean()';與'(df.A =='foo')。mean()'相比,這在10000000行數據幀中節省了大約三分之一。 – fuglede

+1

也許'df.A.value_counts()/ len(df)' – Wen

回答

0

繼溫家寶的評論:。

In [10]: df.A.value_counts()['foo']/len(df) 
Out[10]: 0.625