使用Pandas设置列之间的相关性分数

2024-05-21 01:53:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到列之间的关系,并用分数创建一个新的列,但是我迷路了,不知道该怎么做。在

这是我使用的列

Yan     TNSeq   Kato    Eco-GeneOrth    Essential

accA    accA    accA        accA        accA    
accB    accB    accB        accB        accB    
accC    accC    accC        accC        accC    
accD    accD    accD        accD        accD    
aceF    acpP    acpP        alaS        aceF    
acpP    acpS    acpS        argA        acpP    
acpS    adk     adk         argB        acpS    

我想要的是在Essential和其他列之间设置一个分数。在

像这样:

^{pr2}$

为了给你一些背景知识,前四列是作者报告的必需基因,最后一列是大肠杆菌所有必需基因的列表。我想知道有多少作者在完整的列表中报告了相同的基本基因。在


Tags: 列表关系报告基因作者分数essentialadk
2条回答

看看这个。如果你的数据集很大,可能会有一些性能问题,但是,由于你的数据不是按行排列的,我看不出一种方法可以避免检查每个基本基因的整个数据框:

import pandas as pd
def check(ess, col):
    return any(col.str.contains(ess))
df["Score"] = pd.Series(sum(df.loc[:,"Yan":"Eco-GeneOrth"].
                            apply(lambda col: check(ess, col), axis = 0)) for ess in df.Essential)

#    Yan    TNSeq   Kato    Eco-GeneOrth    Essential   Score
# 0 accA    accA    accA    accA    accA    4
# 1 accB    accB    accB    accB    accB    4
# 2 accC    accC    accC    accC    accC    4
# 3 accD    accD    accD    accD    accD    4
# 4 aceF    acpP    acpP    alaS    aceF    1
# 5 acpP    acpS    acpS    argA    acpP    3
# 6 acpS    adk     adk     argB    acpS    3

你可以这样做:

df['Score'] = pd.DataFrame(df, columns=['Yan', 'TNSeq', 'Kato', 'Eco-GeneOrth']).eq(df['Essential'], axis='rows').sum(axis=1)

相关问题 更多 >