Задача
Используя панд, мне нужно вернуть строку с максимальным количеством для каждого объекта groupby.
Dataset
У меня есть датафрейм под названием «совпадения», который выглядит следующим образом:
FeatureID gene pos
0 1_1_1 KRAS_1 6
1 1_1_1 KRAS_2 8
2 1_1_1 KRAS_3 11
3 1_1_1 NRAS_1 3
4 1_1_1 NRAS_2 11
5 1_1_1 NRAS_3 84
6 1_1_10 KRAS_1 4
7 1_1_10 KRAS_2 3
8 1_1_10 KRAS_3 14
9 1_1_10 NRAS_1 4
10 1_1_10 NRAS_2 6
11 1_1_10 NRAS_3 83
Что я пробовал
Мне нужно сгруппировать фрейм данных по FeatureID, а затем получить количество позиций в каждой группе:
matches.groupby(["FeatureID", "gene"]).count()
Что приводит к:
FeatureID gene
1_1_1 KRAS_1 6
KRAS_2 8
KRAS_3 11
NRAS_1 3
NRAS_2 11
NRAS_3 84
1_1_10 KRAS_1 4
KRAS_2 3
KRAS_3 14
NRAS_1 4
NRAS_2 6
Желаемый вывод:
Мне нужно вернуть строку в каждом объекте groupby, которая содержит наибольшее количество, но я не могу понять, как это сделать.
FeatureID gene count
1_1_1 NRAS_3 84
1_1_10 KRAS_3 14
Решение
Следующая строка возвращает мне ген с максимальным значением для каждой группы groupby:
matches.groupby(["FeatureID", "gene"]).count().sort_values("pos").groupby(level=0).tail(1)