从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python
Posted
技术标签:
【中文标题】从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python【英文标题】:creating a matrix from from a list of subjects with different genes present or absent with python 【发布时间】:2019-03-25 20:04:50 【问题描述】:我有一个包含不同主题的文件,其中包含每个主题存在的基因列表(每个基因新行)。我想将数据重组为一个矩阵,其中行中有不同的受试者,然后是每个存在的基因的列(1 或 0 表示存在或不存在)。我将原始数据作为我用 pandas 导入的 excel 文件来尝试用 Python 执行此操作。但老实说,我不知道如何以一种好的方式做到这一点。
image of how the data is structured and of how it is supposed to be formatted.
非常感谢我能得到的所有帮助!
已经非常感谢了
【问题讨论】:
【参考方案1】:如果这是您的文件原始文件:
Subject,Gene
subject1,gene1
subject1,gene2
subject1,gene3
subject2,gene1
subject2,gene4
subject3,gene2
subject3,gene4
subject3,gene5
然后你可以用pd.crosstab
做这样的事情:
>>> import pandas as pd
>>> df = pd.read_csv("genes.csv")
>>> pd.crosstab(df["Subject"], df["Gene"])
Gene gene1 gene2 gene3 gene4 gene5
Subject
subject1 1 1 1 0 0
subject2 1 0 0 1 0
subject3 0 1 0 1 1
【讨论】:
【参考方案2】:使用pivot()
df['count'] = 1
df.pivot(index='Subject', columns='Gene', values='count')
Gene gene1 gene2 gene3 gene4 gene5
Subject
subject1 1.0 1.0 1.0 NaN NaN
subject2 1.0 NaN NaN 1.0 NaN
subject3 NaN 1.0 NaN 1.0 1.0
已更新 -- 基于您的评论的完整示例
# import pandas module
import pandas as pd
import numpy as np
# read your excel file
df = pd.read_excel(r'path\to\your\file\myFile.xlsx')
# create a new column call 'count' and set it to a value of 1
df['count'] = 1
# use pivot and assign it to a new variable: df2
df2 = df.pivot(index='Subject', columns='Gene', values='count').replace(np.nan, 0)
# print your new dataframe
print(df2)
【讨论】:
嗨,克里斯,感谢您的回复。我还没有完全开始工作。如果我使用脚本:'import pandas as pd' 然后 'df = pd.read_excel("path+file")' 然后我不知道如何定义带有“count”的变量。我可以给 df.pivot 取一个类似的名称:'name = df.pivot(index='Subject', columns='Gene', values='count')' 并在最后打印:'print name' ? @newbie_here 我更新了我的答案,向你展示了一个完整的例子 谢谢克里斯。我现在明白了。也是一个非常好的方法!非常感谢!以上是关于从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python的主要内容,如果未能解决你的问题,请参考以下文章