从特定indexID中选择较大的概率

问题描述 投票:1回答:1

我有一个数据库如下:

     indexID  matchID  order userClean  Probability
0          0        1      0     clean          35
1          0        2      1     clean          75
2          0        2      2     clean          25
5          3        4      5     clean          40
6          3        5      6     clean          85
9          4        5      9     clean          74
12         6        7     12     clean          23
13         6        8     13     clean          72
14         7        8     14     clean          85
15         9       10     15     clean          76
16        10       11     16     clean          91
19        13       14     19     clean          27
23        13       17     23     clean          10
28        13       18     28     clean          71
32        20       21     32     clean          97
33        20       22     33     clean          30

我想要做的是,对于每个重复的indexID,我想选择概率较高的条目并将其标记为干净而另一个标记为脏。

输出应该如下所示:

     indexID  matchID  order userClean  Probability
0          0        1      0     dirty          35
1          0        2      1     clean          75
2          0        2      2     dirty          25
5          3        4      5     dirty          40
6          3        5      6     clean          85
9          4        5      9     clean          74
12         6        7     12     dirty          23
13         6        8     13     clean          72
14         7        8     14     clean          85
15         9       10     15     clean          76
16        10       11     16     clean          91
19        13       14     19     dirty          27
23        13       17     23     dirty          10
28        13       18     28     clean          71
32        20       21     32     clean          97
33        20       22     33     dirty          30
python database python-2.7
1个回答
2
投票

如果需要pandas解决方案通过将ProbabilitySeries.ne)的!=列与max创建的每个组的transform值进行比较来创建布尔掩码,因为需要与Series大小相同的df

mask = df['Probability'].ne(df.groupby('indexID')['Probability'].transform('max'))
df.loc[mask, 'userClean'] = 'dirty'
print (df)
    indexID  matchID  order userClean  Probability
0         0        1      0     dirty           35
1         0        2      1     clean           75
2         0        2      2     dirty           25
5         3        4      5     dirty           40
6         3        5      6     clean           85
9         4        5      9     clean           74
12        6        7     12     dirty           23
13        6        8     13     clean           72
14        7        8     14     clean           85
15        9       10     15     clean           76
16       10       11     16     clean           91
19       13       14     19     dirty           27
23       13       17     23     dirty           10
28       13       18     28     clean           71
32       20       21     32     clean           97
33       20       22     33     dirty           30

详情:

print (df.groupby('indexID')['Probability'].transform('max'))
0     75
1     75
2     75
5     85
6     85
9     74
12    72
13    72
14    85
15    76
16    91
19    71
23    71
28    71
32    97
33    97
Name: Probability, dtype: int64

如果想比较meangt (>)

mask = df['Probability'].gt(df['Probability'].mean())
df.loc[mask, 'userClean'] = 'dirty'
print (df)
    indexID  matchID  order userClean  Probability
0         0        1      0     clean           35
1         0        2      1     dirty           75
2         0        2      2     clean           25
5         3        4      5     clean           40
6         3        5      6     dirty           85
9         4        5      9     dirty           74
12        6        7     12     clean           23
13        6        8     13     dirty           72
14        7        8     14     dirty           85
15        9       10     15     dirty           76
16       10       11     16     dirty           91
19       13       14     19     clean           27
23       13       17     23     clean           10
28       13       18     28     dirty           71
32       20       21     32     dirty           97
33       20       22     33     clean           30
© www.soinside.com 2019 - 2024. All rights reserved.