我想找到列之间的关系并用分数创建一个新列,但我迷路了,不知道该怎么做。
以下是我正在使用的列
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和其他列之间设置分数。
像这样:
Yan TNSeq Kato Eco-GeneOrth Essential Score
accA accA accA accA accA 4
accB accB accB accB accB 4
accC accC accC accC accC 4
accD accD accD accD accD 4
aceF acpP acpP alaS aceF 1
acpP acpS acpS argA acpP 3
acpS adk adk argB acpS 3
为了给你一些背景知识,前四列是作者报告的必需基因,最后一列是大肠杆菌所有必需基因的列表。我想要的是知道有多少作者用完整列表报告相同的基本基因。
答案 0 :(得分:0)
你可以这样做:
df['Score'] = pd.DataFrame(df, columns=['Yan', 'TNSeq', 'Kato', 'Eco-GeneOrth']).eq(df['Essential'], axis='rows').sum(axis=1)
答案 1 :(得分:0)
检查一下。如果您的数据集很大,可能会有一些性能问题,但是,由于您的数据没有按行对齐,我没有找到方法来避免检查每个Essential基因的整个数据框:
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