我有这个数据集,包含键及其相关的置信度值。
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变化。
答案 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')
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