2016-06-13 112 views
0

我試圖限制由描述輸出返回的輸出到只有那些計數大於或等於任何給定數量的記錄的子集。熊貓:過濾描述輸出(計數)

我的數據幀是一個較大的一個子集,並且被定義爲:

df = evaluations[['score','garden_id']] 

當運行描述此,

df.groupby('garden_id').describe() 

我想過濾返回的數據的那些記錄數>指定的數字。

我的輸出看起來像:

Out[39]: 
       score 
garden_id    
37254  count  6 
      mean  20 
      std  0 
      min  20 
      25%  20 
      50%  20 
      75%  20 
      max  20 
37273  count  1 
      mean  17 
      std  NaN 
      min  17 
      25%  17 
      50%  17 
      75%  17 
      max  17 
37284  count  1 
      mean  19 
      std  NaN 
      min  19 
      25%  19 
      50%  19 
      75%  19 
      max  19 
37288  count  1 
      mean  11 
      std  NaN 
      min  11 
      25%  11 
      50%  11 
       ... 

我要去嘗試修改類似:modify-output-from-python-pandas-describe,但我只得到這樣的:

Out[40]: 
Empty DataFrame 
Columns: [score] 
Index: [] 

當我運行df.groupby('garden_id').describe().loc[['count']]

我做嘗試newframe = df.groupby('garden_id').describe().count() > 3,但我得到一個掩碼顯示哪些記錄是真實的,哪些是錯誤的,所以不太確定如何使用它。

有沒有一種方法可以直接使用describe方法過濾掉所需的記錄,而無需處理數據屏蔽等?

+0

@ horcle什麼是ou你在追求什麼? – Merlin

+0

@jezrael顯然明白我想要什麼:我想爲描述輸出中的計數設置一個閾值,然後找出哪個garden_ids符合這個標準。 –

+0

。@ horcle。您不限制.describe()的輸出。輸出是相同的。 – Merlin

回答

2

我認爲你可以使用slicers選擇,然後boolean indexing尋找indexidx1,其中面具是True

import pandas as pd 

df = pd.DataFrame({'score':[1,2,3,3,1,2], 
        'garden_id':[1,1,1,1,2,2]}) 

print (df) 
    garden_id score 
0   1  1 
1   1  2 
2   1  3 
3   1  3 
4   2  1 
5   2  2 

newframe = df.groupby('garden_id').describe() 
print (newframe) 
        score 
garden_id     
1   count 4.000000 
      mean 2.250000 
      std 0.957427 
      min 1.000000 
      25% 1.750000 
      50% 2.500000 
      75% 3.000000 
      max 3.000000 
2   count 2.000000 
      mean 1.500000 
      std 0.707107 
      min 1.000000 
      25% 1.250000 
      50% 1.500000 
      75% 1.750000 
      max 2.000000 
idx = pd.IndexSlice 
mask = newframe.loc[idx[:,'count'],:] > 3 
print (mask) 
       score 
garden_id    
1   count True 
2   count False 

idx1 = mask[mask.values].index.get_level_values('garden_id') 
print (idx1) 
Int64Index([1], dtype='int64', name='garden_id') 

print (newframe.loc[idx[idx1,:],:]) 
        score 
garden_id     
1   count 4.000000 
      mean 2.250000 
      std 0.957427 
      min 1.000000 
      25% 1.750000 
      50% 2.500000 
      75% 3.000000 
      max 3.000000 
+0

工程就像一個魅力。 –

0

如果你在尋找得分的次數大於3 試試這個:

df2 = df.groupby('garden_id').count() 
df2[df2['score']> 3]