根据阈值选择数据帧的前N行

时间:2017-09-12 23:29:04

标签: python pandas dataframe

我有这个数据集,包含键及其相关的置信度值。

values = [('S08', -6276.0), ('S01', -6360.0), ('S03', -6504.0), ('C01', -521682.0), 
          ('C03', -556262.0), ('C08', -558108.0), ('S06', -1723974.0),
          ('S09', -2379806.0), ('C06', -2472398.0), ('C09', -2930688.0)]
df = pd.DataFrame(values, columns=['key', 'confidence'])

   key  confidence
0  S08     -6276.0
1  S01     -6360.0
2  S03     -6504.0
3  C01   -521682.0
4  C03   -556262.0
5  C08   -558108.0
6  S06  -1723974.0
7  S09  -2379806.0
8  C06  -2472398.0
9  C09  -2930688.0

在这种情况下,前3行是置信度值非常高且需要选择的行。其余行(从第四行开始)的置信度值与前3相差很远,需要丢弃。 TopN行可以动态地从1到9变化。

2 个答案:

答案 0 :(得分:3)

使用布尔索引应用过滤阈值。

thresh = 0.0005 * df.confidence.std() # for example 
df = df[df.confidence.diff().fillna(0).abs() < thresh]
df
   key  confidence
0  S08     -6276.0
1  S01     -6360.0
2  S03     -6504.0

要保留NaNs,请使用 df.where

df.confidence = df.confidence.where(df.confidence.diff().fillna(0).abs() < thresh)
df  
   key  confidence
0  S08     -6276.0
1  S01     -6360.0
2  S03     -6504.0
3  C01         NaN
4  C03         NaN
5  C08         NaN
6  S06         NaN
7  S09         NaN
8  C06         NaN
9  C09         NaN

答案 1 :(得分:2)

或使用pandas.DataFrame.nlargest

df=pandas.DataFrame(values, columns=['key', 'confidence']).nlargest(3, 'confidence')

nighgest(3,&#39;置信度&#39;)

   key  confidence
0  S08     -6276.0
1  S01     -6360.0
2  S03     -6504.0

http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.nlargest.html