создание матрицы из списка предметов с разными генами, присутствующими или отсутствующими с питоном - PullRequest
0 голосов
/ 21 октября 2018

У меня есть файл с разными предметами, в котором есть список генов, присутствующих на предмет (новая строка на ген).Я хотел бы реструктурировать данные в матрицу с различными субъектами в строках, а затем столбцом для каждого гена, который присутствует (с 1 или 0 для настоящего или отсутствующего).У меня есть исходные данные в виде файла Excel, который я импортировал с помощью pandas, чтобы попытаться сделать это с помощью Python.Но, честно говоря, я понятия не имею, как сделать это хорошим способом.

изображение того, как структурированы данные и как они должны быть отформатированы.

Я действительно ценю всю помощь, которую я могу получить!

Огромное спасибо уже

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Если это исходный файл вашего файла:

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
0 голосов
/ 21 октября 2018

Использование 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...