熊猫:过滤描述输出(计数)
问题描述:
我试图限制由描述输出返回的输出到只有那些计数大于或等于任何给定数量的记录的子集。熊猫:过滤描述输出(计数)
我的数据帧是一个较大的一个子集,并且被定义为:
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
方法过滤掉所需的记录,而无需处理数据屏蔽等?
答
我认为你可以使用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
+0
工程就像一个魅力。 –
答
如果你在寻找得分的次数大于3 试试这个:
df2 = df.groupby('garden_id').count()
df2[df2['score']> 3]
@ horcle什么是ou你在追求什么? – Merlin
@jezrael显然明白我想要什么:我想为描述输出中的计数设置一个阈值,然后找出哪个garden_ids符合这个标准。 –
。@ horcle。您不限制.describe()的输出。输出是相同的。 – Merlin