使用elasticsearch搜索索引数据。输入文件匹配查询是dob和姓氏。它有同一个dob的学生。所以该文件也作为输出。想知道要删除低分行。我该如何处理?
Filename Name DOB Score PageNumber
11086 Ram 11 06 1930 6.4504585 1
11086 Ram 11 06 1930 6.4504585 2
11086 Ram 11 06 1930 6.4504585 1
81564 Kiran 11 06 1930 3.5517883 2
81564 Kiran 11 06 1930 3.5517883 33
81564 Kiran 11 06 1930 3.5517883 12
754133 peter 11 06 1930 2.5905614 1
754133 peter 11 06 1930 2.5905614 1
所需的输出
Filename Name DOB Score PageNumber
11086 Ram 11 06 1930 6.4504585 1
11086 Ram 11 06 1930 6.4504585 2
11086 Ram 11 06 1930 6.4504585 1
答案 0 :(得分:4)
假设您只想要分数大于3
df.query('Score > 3')
Filename Name DOB Score PageNumber
0 11086 Ram 11 06 1930 6.450458 1
1 11086 Ram 11 06 1930 6.450458 2
2 11086 Ram 11 06 1930 6.450458 1
3 81564 Kiran 11 06 1930 3.551788 2
4 81564 Kiran 11 06 1930 3.551788 33
5 81564 Kiran 11 06 1930 3.551788 12
假设您要按标准偏差的某个倍数进行过滤
df[df.Score > (df.Score.mean() - 1 * df.Score.std())]
Filename Name DOB Score PageNumber
0 11086 Ram 11 06 1930 6.450458 1
1 11086 Ram 11 06 1930 6.450458 2
2 11086 Ram 11 06 1930 6.450458 1
3 81564 Kiran 11 06 1930 3.551788 2
4 81564 Kiran 11 06 1930 3.551788 33
5 81564 Kiran 11 06 1930 3.551788 12
或者你可以只抓住等于最大值
的行df.query('Score == @df.Score.max()')
Filename Name DOB Score PageNumber
0 11086 Ram 11 06 1930 6.450458 1
1 11086 Ram 11 06 1930 6.450458 2
2 11086 Ram 11 06 1930 6.450458 1
或者
df[df.Score == df.Score.max()]
Filename Name DOB Score PageNumber
0 11086 Ram 11 06 1930 6.450458 1
1 11086 Ram 11 06 1930 6.450458 2
2 11086 Ram 11 06 1930 6.450458 1
答案 1 :(得分:3)
让我们尝试基于.std
的过滤。
df = df[~((df.Score - df.Score.max()).abs() > df.Score.std())]
df
Filename Name DOB Score PageNumber
0 11086 Ram 11 06 1930 6.450458 1
1 11086 Ram 11 06 1930 6.450458 2
2 11086 Ram 11 06 1930 6.450458 1
Score.std
成为您数据的动态阈值。
其中,
((df.Score - df.Score.max()).abs())
0 0.000000
1 0.000000
2 0.000000
3 2.898670
4 2.898670
5 2.898670
6 3.859897
7 3.859897
Name: Score, dtype: float64
df.Score.std()
1.7451830491923459
df.Score.max()
6.4504584999999999