У меня есть кадр данных для панд, который выглядит следующим образом:
SampleID expr Gene Period tag
4 HSB103 7.214731 ENSG00000198615 5 HSB103|ENSG00000198615
2 HSB103 4.214731 ENSG00000198725 4 HSB103|ENSG00000198725
5 HSB100 3.214731 ENSG00000198615 4 HSB100|ENSG00000198615
1 HSB106 2.200031 ENSG00000198780 5 HSB106|ENSG00000198780
0 HSB103 1.214731 ENSG00000198780 4 HSB103|ENSG00000198780
3 HSB103 0.214731 ENSG00000198615 4 HSB103|ENSG00000198615
Я хочу сгруппировать по Gene
, а затем отсортировать по убыванию expr
, чтобы он выглядел так:
SampleID expr Gene Period tag
0 HSB103 7.214731 ENSG00000198615 5 HSB103|ENSG00000198615
1 HSB100 3.214731 ENSG00000198615 4 HSB100|ENSG00000198615
2 HSB103 0.214731 ENSG00000198615 4 HSB103|ENSG00000198615
3 HSB103 4.214731 ENSG00000198725 4 HSB103|ENSG00000198725
4 HSB106 2.200031 ENSG00000198780 5 HSB106|ENSG00000198780
5 HSB103 1.214731 ENSG00000198780 4 HSB103|ENSG00000198780
Я пробовал следующее, но ни один из них не работает:
Попытка 1:
p4p5.sort_values(by=['expr'], ascending=[False], inplace=True).groupby(['Gene'])
Попытка 2:
p4p5.groupby(['Gene'])
p4p5.sort_values(by=['expr'], ascending=[False], inplace=True)
Обновление до вопроса :
После того, как я сгруппирую и отсортирую, как я могу затем отфильтровать кадр данных, чтобы сохранить только самые нижние 10% экспрессии на группу генов? Когда я говорю bottom 10%
, я имею в виду в смысле теоретического распределения, НЕ если бы у меня было 100 строк на ген, я бы получил 10 строк после фильтрации. Я полагаю, это будет что-то вроде:
p4p5.sort_values(by=['Gene','expr'], ascending=[True,False], inplace=True).quantile([0.1])