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