У меня есть df, как:
group name sum count max_size
1 1 aaa 3 2 4
2 1 bbb 3 1 4
3 1 ccc 2 2 4
4 1 ddd 2 2 4
5 1 eee 1 0 4
6 2 aaa 3 2 3
7 2 bbb 3 1 3
8 2 ccc 2 3 3
9 2 ddd 2 1 3
10 3 aaa 3 4 4
11 3 bbb 3 2 4
12 3 ccc 2 5 4
13 3 ddd 2 1 4
14 3 eee 2 1 4
15 3 fff 2 1 4
Я бы хотел обозначить каждое наблюдение в соответствии с этим решением:
- Сначала groupby () по группам, а затем упорядочить имена по сумме, а затем по количеству в порядке убывания
- Выберите верхние n элементов, как в
max_size
, что является максимальным количеством элементов, которые должны быть выбраны в группе
В случае, подобном group 2
, существует максимальный размер элементов, которые должны быть выбраны (3), и 3 возможных кандидата.
group name decision sum count max_size
1 2 aaa winner 3 2 3
2 2 bbb winner 3 1 3
3 2 ccc winner 2 3 3
4 2 ddd loser 2 1 3
aaa
, bbb
и ccc
- топ-3, упорядоченные сначала по sum
, а затем count
, в то время как ddd
отсутствует.
Для group 3
хотя:
group name decision sum count max_size
1 3 aaa winner 3 4 4
2 3 bbb winner 3 2 4
3 3 ccc winner 2 5 4
4 3 ddd unclear 2 1 4
5 3 eee unclear 2 1 4
6 3 fff unclear 2 1 4
aaa
, bbb
, ccc
являются верхними 3, но 4-й элемент (учитывая, что max_size = 4) неясен. ddd
, eee
и fff
имеют одинаковое количество и одинаковую сумму.
Я бы хотел достичь окончательного фрейма данных, помечающего наблюдения следующим образом:
name decision sum count max_size
1 aaa winner 3 2 4
2 bbb winner 3 1 4
3 ccc unclear 2 2 4
4 ddd unclear 2 2 4
5 eee winner 1 0 4
6 aaa winner 3 2 3
7 bbb winner 3 1 3
8 ccc winner 2 3 3
9 ddd loser 2 1 3
10 aaa winner 3 4 4
11 bbb winner 3 2 4
12 ccc winner 2 5 4
13 ddd unclear 2 1 4
14 eee unclear 2 1 4
15 fff unclear 2 1 4
Воспроизводимый пример:
{'group': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 2, 6: 2, 7: 2, 8: 2, 9: 3, 10: 3, 11: 3, 12: 3, 13: 3, 14: 3}, 'name': {0: 'aaa', 1: 'bbb', 2: 'ccc', 3: 'ddd', 4: 'eee', 5: 'aaa', 6: 'bbb', 7: 'ccc', 8: 'ddd', 9: 'aaa', 10: 'bbb', 11: 'ccc', 12: 'ddd', 13: 'eee', 14: 'fff'}, 'decision': {0: 'winner', 1: 'winner', 2: 'unclear', 3: 'unclear', 4: 'winner', 5: 'winner', 6: 'winner', 7: 'winner', 8: 'loser', 9: 'winner', 10: 'winner', 11: 'winner', 12: 'unclear', 13: 'unclear', 14: 'unclear'}, 'sum': {0: 3, 1: 3, 2: 2, 3: 2, 4: 1, 5: 3, 6: 3, 7: 2, 8: 2, 9: 3, 10: 3, 11: 2, 12: 2, 13: 2, 14: 2}, 'count': {0: 2, 1: 1, 2: 2, 3: 2, 4: 0, 5: 2, 6: 1, 7: 3, 8: 1, 9: 4, 10: 2, 11: 5, 12: 1, 13: 1, 14: 1}, 'max_size': {0: 4, 1: 4, 2: 4, 3: 4, 4: 4, 5: 3, 6: 3, 7: 3, 8: 3, 9: 4, 10: 4, 11: 4, 12: 4, 13: 4, 14: 4}}