两个数据帧之间的多个条件

2024-06-02 05:55:46 发布

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

我正在处理一个变量调用格式(.vcf)文件。我正在从个人基因组数据中分离基因型等位基因,并计算出患这种特殊疾病的几率。根据我的分析,我需要实施如下条件: 我有两个不同的熊猫数据帧,它们是从.vcf文件中提取的

  1. 疾病
^{tb1}$

2.个体SNPs

^{tb2}$

我的条件是:如果数字1.dataframe(Diseases)列'SNP'与数字2匹配。数据帧(单个SNP)列“SNP”。然后我将从individualSNPs数据框cola和colb列中进行检查

if( cola=0 and colb=0):
  score = MinorAlleFrequency* effectSize (from datafram Diseases of matched row)

if( cola=0 and colb=1) or (cola=1 and colb=1):
  score = (1 - MinorAlleFrequency)* effectSize (from datafram Diseases of matched row)

if( cola=1 and colb=0):
  print("genotype unavailable")
 

然后分数值将保存在CSV文件中

提前谢谢


Tags: and文件数据if数字条件疾病vcf
2条回答

首先,您可以合并您的数据帧,这样您就可以得到一个新的数据帧,其中包含两个数据帧中的列,并且只保留Diseases数据帧(列SNP)中存在的IndividualSNPs数据帧(列SNP)中的行。就像:

import pandas as pd

new_df = pd.merge(diseases_df, individual_snp_df, on="SNP", how="inner")

然后,由于您没有那么多条件,您可以:

indexes = new_df[(new_df["cola"] == 0) & (new_df["colb"] == 0)]
new_df["score"].loc[indexes] = new_df["MinorAlleFrequency"] * new_df["EffectSize"]

并用您的变体重复它(我猜您的第二个条件可以恢复为colb == 1):

indexes = new_df[new_df["colb"] == 1]
new_df["score"].loc[indexes] = (1 - new_df["MinorAlleFrequency"]) * new_df["EffectSize"]

最后,使用NA将其余部分清空可能是比将字符串(“genetic unavailable”)放入浮点列更好的解决方案

newDf = IndividualSNPs[Diseases["SNP"] == IdividualSNPs["SNP"]][["cola","colb"]]

score = np.where(((newDf["cola"] == 0) & (newDf["colb'] == 0)), (Diseases["MinorAlleFrequency"])*(Diseases["EffectSize"]), np.where(((newDf["cola"] == 0)&(newDf["colb"] == 1)) | ((newDf["cola"] == 1) & (newDf["colb"] == 1)), (1 - Diseases["MinorAlleFrequency"]) * (Diseases["EffectSize"]),print("genotype unavaible")))

相关问题 更多 >