Python 根据列的阈值删除行

Python 根据列的阈值删除行,python,pandas,dataframe,Python,Pandas,Dataframe,使用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.4

使用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

假设您只需要分数大于
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


假设您只需要分数大于
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


让我们试试基于
.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

让我们试试基于
.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

我不想成为像分数>3这样的特定范围。如果假设输入文件不同,则表示无法进行训练。它应该比较所有问题并显示最高分数。@prem这些是你应该在问题中包含的细节。谢谢你编辑你的问题。我不想成为像分数>3这样的特定范围。如果假设输入文件不同,则表示无法进行训练。它应该比较所有问题并显示最高分数。@prem这些是你应该在问题中包含的细节。谢谢你编辑你的问题。