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