Python 基于阈值选择数据帧的前N行

Python 基于阈值选择数据帧的前N行,python,pandas,dataframe,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)]

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

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行相差很远,需要丢弃。TopN行可以从1到9动态变化

为使用布尔索引进行筛选应用阈值


或者使用
pandas.DataFrame.nlargest

df=pandas.DataFrame(values, columns=['key', 'confidence']).nlargest(3, 'confidence')
最大(3,‘信心’)

你的问题到底是什么?df的长度总是10吗?使用k-means或核密度估计来获得更准确的结果。@mwweb我看了k-means,这很有意义。另一方面,使用MeanShift似乎是解决这个问题的更合适的方法,但你还是要选择带宽。较大的值可能会导致合并不同的集群。一个非常小的值可能会导致太多的簇。如果数组的长度大于10,比如说20或30,我会使用轮廓系数聚类来寻找最佳K,并使用K中的K均值。TopN行是动态的。可以是1,也可以是4或5。i、 e如果你把最大的(4)放进去,你也会得到第四个,这是不需要的。@mevdiven我明白了。“现在看我的答案。”COLDSPEED说得很近。我添加了数据集的std偏差,使其成为动态阈值=0.0005*df.confidence.std(),基于此,这不是OP想要的。
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
df=pandas.DataFrame(values, columns=['key', 'confidence']).nlargest(3, 'confidence')
   key  confidence
0  S08     -6276.0
1  S01     -6360.0
2  S03     -6504.0