【问题标题】:Multiple condition between two pandas dataframe [closed]两个熊猫数据框之间的多重条件[关闭]
【发布时间】:2021-08-01 14:15:46
【问题描述】:

我正在处理一个调用 Format(.vcf) 文件的变体。我正在从个体基因组数据中分离基因型等位基因,并计算患有特定疾病的机会。根据我的分析,我需要实现如下条件: 我有两个从 .vcf 文件中提取的不同熊猫数据框

  1. 疾病
SNP EfectSize MinorAlleFrequency
rs05 0.32 0.09
rs012 0.5 0.20
rs02 0.8 0.29

2.个体SNP

SNP cola colb
rs02 0 1
rs03 1 1
rs12 0 0

我的情况如下:如果数字 1.dataframe(疾病)列“SNP”与数字 2.dataframe(individualSNPs)列“SNP”匹配。然后我会从单个 SNPs 数据框 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 文件中。

提前致谢

【问题讨论】:

  • 这是多个问题,但您应该先看看pandas.mergeDataFrame.join

标签: python pandas dataframe conditional-statements pandas-groupby


【解决方案1】:

首先,您可以从合并您的数据框开始,以便您获得一个包含两个数据框列的新数据框,并且只保留 IndividualSNPs 数据框(列 SNP)中存在的 Diseases 数据框(列 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 将其余部分留空可能是比将字符串(“基因型不可用”)放在浮点列中更好的解决方案。

【讨论】:

  • 其实你是对的!我用现在有效的解决方案编辑了我的答案
  • 解决了。我认为它会...new_df.loc[indexes, "score"] = (1 - new_df["MinorAlleFrequency"]) * new_df["EffectSize"]....谢谢
【解决方案2】:
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")))

【讨论】:

  • 也许这样的事情可以解决这个问题。当然括号必须匹配!
猜你喜欢
  • 2019-05-02
  • 2020-10-14
  • 2017-06-16
  • 2018-04-18
  • 2019-11-19
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多