python - Python pandas 排名/排序基于对每个输入不同的两列列的分组
问题描述
我有以下数据框:
Signature Genes Labels Scores Annotation
CELF1 AARS 0 -5.439356884 EMPTY
CELF1 AATF 0 -5.882719549 EMPTY
CELF1 ABCF1 0 -6.011462342 EMPTY
HNRNPC AARS 0 -6.166240409 EMPTY
HNRNPC AATF 0 -6.432658981 EMPTY
HNRNPC ABCF1 0 -6.476526092 EMPTY
FUS AARS 0 -5.646015964 EMPTY
FUS AATF 0 -6.224914841 EMPTY
FUS ABCF1 0 -6.395334389 EMPTY
我想根据分数列对我的“分数”列进行排名,以便在签名列中排名“基因”
Signature Genes Labels Scores Annotation Rank
CELF1 AARS 0 -5.439356884 EMPTY 1
CELF1 AATF 0 -5.882719549 EMPTY 2
CELF1 ABCF1 0 -6.011462342 EMPTY 3
HNRNPC AARS 0 -6.166240409 EMPTY 1
HNRNPC AATF 0 -6.432658981 EMPTY 2
HNRNPC ABCF1 0 -6.476526092 EMPTY 3
FUS AARS 0 -5.646015964 EMPTY 1
FUS AATF 0 -6.224914841 EMPTY 2
FUS ABCF1 0 -6.395334389 EMPTY 3
我根据这篇文章关注了。我的代码是这样的:
data=pd.read_csv("trial1.csv",sep='\t')
data['max_score'] = data.groupby(['Signature','Genes'])['Scores'].transform('max').astype(float)
data['rank']=data.groupby('Signature')['max_score'].rank()
但是,我的分数根据绝对值进行排名,如下所示:
Signature Genes Labels Scores Annotation Rank
CELF1 ABCF1 0 -6.011462342 EMPTY 1
CELF1 AATF 0 -5.882719549 EMPTY 2
CELF1 AARS 0 -5.439356884 EMPTY 3
HNRNPC ABCF1 0 -6.476526092 EMPTY 1
HNRNPC AATF 0 -6.432658981 EMPTY 2
HNRNPC AARS 0 -6.166240409 EMPTY 3
FUS ABCF1 0 -6.395334389 EMPTY 1
FUS AATF 0 -6.224914841 EMPTY 2
FUS AARS 0 -5.646015964 EMPTY 3
解决方案
排名不是按绝对值排序的。它按升序排序,这是它的默认值。您只需将呼叫更改为 torank()
即可rank(ascending=False)
。请参阅文档。
推荐阅读
- docker - Kubernetes:即使在 pod 就绪状态为 true 后,部署也无法推出
- neo4j - Neo4j 数据库错误一般未知错误
- javascript - 在搜索 JSON 数据时删除区分大小写:PHP
- python - 截断并重新加载
- angular - 有没有办法根据日期过滤材料表
- c# - 在 .NET 中为“模型”类提供接口有什么好处?
- javascript - 调用 jQuery 没有返回正确的数据
- python - 有没有办法在收到特定请求时停止其他服务
- javascript - 如何将所有对象字段复制到具有相同名称的变量中?
- typescript - 如何阻止 tsc 对用于开发/测试的类型进行类型检查