Мне нужно сгруппировать кадр данных по столбцу FeatureID
, а затем проверить каждую группу, чтобы определить, является ли максимальное значение в столбце gene_count
группы по крайней мере в 3 раза больше, чем любое из других значений gene_count
в группа.
Если ни одно из значений не будет хотя бы в 3 раза больше, мне нужно вернуть строку с максимальным значением в столбце feature_div
.
На этом этапе, если нет строки с max gene_count
(иначе они все связаны) и нет строки с max feature_div
, то этот FeatureID
возвращать не следует.
Итак, логика псевдокода:
For each group in df.groupby("FeatureID"):
If max(gene_count) 3x > all other gene_counts in group:
return this row
Elif:
there is a max(feature_div) return this row
Else:
max(gene_count) is not >3 x higher than all other gene_counts in group
and the feature_div scores are all tied
pass
Вот мой фрейм данных:
FeatureID gene feature_div gene_count
1_1001_1028 NTRK1.1 2 2.0
1_1001_1028 TP53.1 1 2.0
1_1001_193 MTOR.1 1 9.0
1_1001_193 TP53.2 1 3.0
1_1003_1034 EGFR.1 3 4.0
1_1003_1034 EGFR.5 3 4.0
1_1008_823 ABL1.1 1 2.0
1_1008_823 BRCA2.2 2 2.0
Мой желаемый результат будет выглядеть так:
FeatureID gene feature_div gene_count
1_1001_1028 NTRK1.1 2 2.0
1_1001_193 MTOR.1 1 9.0
1_1008_823 BRCA2.2 2 2.0
В первой строке NTRK1.1 выбирается, потому что счетчики связаны, но он имеет feature_div
выше, чем TP53.1.
Во втором ряду выбирается MTOR.1, потому что gene_count
в 3 раза выше, чем TP53.3.
В третьей строке выбрано BRCA2.2, поскольку gene_count
связаны, но имеют более высокое значение feature_div
.
1_1003_1034 не возвращается, потому что gene_count
не в 3 раза выше, чем другие опции, и нет feature_div
выше, чем другие опции.