根据列

时间:2017-09-13 06:29:19

标签: 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.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

2 个答案:

答案 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