熊猫:过滤描述输出(计数)

时间:2016-06-13 02:12:54

标签: python pandas

我试图将describe输出返回的输出限制为只有那些计数大于或等于任何给定数字的记录的子集。

我的数据框是较大数据框的子集,定义为:

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

当我对此进行描述时,

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

我想将返回的数据过滤到count> gt的记录中指定的号码。

我的输出如下:

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方法过滤出所需的记录而无需处理数据屏蔽等?

2 个答案:

答案 0 :(得分:2)

我认为您可以使用slicers进行选择,然后使用boolean indexing查找index idx1,其中掩码为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

答案 1 :(得分:0)

如果您要查找大于3的分数   试试这个:

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