Объедините два столбца под одним заголовком в массиве Numpy

У меня есть два массива Numpy, которые мне нужно объединить, поддерживая только определенные столбцы из A size (888, 1114253) , в зависимости от строк, которые у меня есть в B size (555861, 3) .

Проблема в том, что заголовок A равен 55730 : каждый столбец имеет два значения!

Другими словами, я хочу получить только столбцы A где заголовок соответствует строкам в B , но в A каждый столбец «double»

Пример пояснит:

A :

 family id mum dad rs1 rs2 rs3 rs4 rs5 rs6 rs7 rs8 rs9 rs10 rs11 rs12 1 1 4 6 ATAATTCCGGATAGAAGATAG GCC 2 2 7 9 TAGACTCTGATTAAACGGTAC CCT 3 3 2 8 TTGGCTCTGGATAGACGGTTC CCC 4 4 5 1 AAAATTCCGATTAAAAGATAG CCT 

Поскольку в этом файле каждый rsxxx столбца rsxxx имеет два соответствующих столбца, я должен найти способ их объединения, поэтому я могу прочитать файл как массив

B :

 1 rs1 2345 1 rs2 2346 2 rs5 2348 4 rs8 2351 4 rs12 2360 

Желаемый результат

Output :

  family id mum dad rs1 rs2 rs5 rs8 rs12 1 1 4 6 ATAAGGAACC 2 2 7 9 TAGAGAACCT 3 3 2 8 TTGGGGACCC 4 4 5 1 AAAAGAAACT 

Идеи?

На консоли

B :

 array([['1', 'rs3094315', '752566'], ['1', 'rs12562034', '768448'], ['1', 'rs3934834', '1005806'], ..., ['23', 'rs2032612', '21866491'], ['23', 'rs2032621', '21872738'], ['23', 'rs2032617', '21896261']], dtype='<S10') 

One Solution collect form web for “Объедините два столбца под одним заголовком в массиве Numpy”

Похоже, что каждый столбец разделен двумя пробелами, но каждая пара генов разделяется одним пространством. Если это так, вы можете использовать

 delimiter=' ' #two spaces 

в np.loadtxt :

 import numpy as np from StringIO import StringIO # for example file a = StringIO("""family id mum dad rs1 rs2 rs3 rs4 rs5 rs6 rs7 rs8 rs9 rs10 rs11 rs12 1 1 4 6 ATAATTCCGGATAGAAGATAG GCC 2 2 7 9 TAGACTCTGATTAAACGGTAC CCT 3 3 2 8 TTGGCTCTGGATAGACGGTTC CCC 4 4 5 1 AAAATTCCGATTAAAAGATAG CCT """) nrs = 12 # number of `rs` columns, for dtype dt = 'int,'*4 + 'S10,'*nrs A = np.genfromtxt(a, delimiter=' ', names=True, dtype=dt) 

A :

 array([ (1, 1, 4, 6, ' A T', 'A A', 'T T', 'C C', 'G G', 'A T', 'A G', 'A A', 'G A', 'T A', 'G G', 'C C'), (2, 2, 7, 9, ' T A', 'G A', 'C T', 'C T', 'G A', 'T T', 'A A', 'A C', 'G G', 'T A', 'C C', 'C T'), (3, 3, 2, 8, ' T T', 'G G', 'C T', 'C T', 'G G', 'A T', 'A G', 'A C', 'G G', 'T T', 'C C', 'C C'), (4, 4, 5, 1, ' A A', 'A A', 'T T', 'C C', 'G A', 'T T', 'A A', 'A A', 'G A', 'T A', 'G C', 'C T')], dtype=[('family', '<i8'), ('id', '<i8'), ('mum', '<i8'), ('dad', '<i8'), ('rs1', 'S10'), ('rs2', 'S10'), ('rs3', 'S10'), ('rs4', 'S10'), ('rs5', 'S10'), ('rs6', 'S10'), ('rs7', 'S10'), ('rs8', 'S10'), ('rs9', 'S10'), ('rs10', 'S10'), ('rs11', 'S10'), ('rs12', 'S10')]) 

Затем, чтобы получить доступ только к столбцам из B , сделайте следующее:

 b = StringIO("""1 rs1 2345 1 rs2 2346 2 rs5 2348 4 rs8 2351 4 rs12 2360""") B = np.genfromtxt(b, usecols=[1], dtype='S10') 

Теперь используйте A[B] :

 A[B] array([(' A T', 'A A', 'G G', 'A A', 'C C'), (' T A', 'G A', 'G A', 'A C', 'C T'), (' T T', 'G G', 'G G', 'A C', 'C C'), (' A A', 'A A', 'G A', 'A A', 'C T')], dtype=[('rs1', 'S10'), ('rs2', 'S10'), ('rs5', 'S10'), ('rs8', 'S10'), ('rs12', 'S10')]) 

Или, если вы хотите также первые четыре столбца:

 A[['family', 'id', 'mum', 'dad'] + list(B)] array([(1, 1, 4, 6, ' A T', 'A A', 'G G', 'A A', 'C C'), (2, 2, 7, 9, ' T A', 'G A', 'G A', 'A C', 'C T'), (3, 3, 2, 8, ' T T', 'G G', 'G G', 'A C', 'C C'), (4, 4, 5, 1, ' A A', 'A A', 'G A', 'A A', 'C T')], dtype=[('family', '<i8'), ('id', '<i8'), ('mum', '<i8'), ('dad', '<i8'), ('rs1', 'S10'), ('rs2', 'S10'), ('rs5', 'S10'), ('rs8', 'S10'), ('rs12', 'S10')]) 
Interesting Posts

использование функций python непосредственно в Qt-дизайнере как сигналы

Автоматизация ввода для терминала

Как объединить ведущую ветвь в ветвь функции с GitPython?

Обязательное поле serializer Django REST Framework = false

Как полностью удалить любой журнал из модуля запросов в Python

Вводные оси, привязанные к определенным точкам в координатах данных?

Наиболее эффективный метод проверки наличия словарного ключа и обработки его значения, если он

не удается поймать SQLAlchemy IntegrityError

Python Красивый суп, как JSON декодировать `dict`?

Отфильтруйте набор запросов Django ContentType, чтобы включать только модели, которые имеют конкретный метод

Работа с иностранными символами в запросе django

Эффективнее использовать if-return-return или if-else-return?

Tensorflow ImportError: нет модуля с именем '_pywrap_tensorflow_internal' в Windows 10

Итерации через членов класса в порядке их объявления

AttributeError: объект 'module' не имеет атрибута

Python - лучший язык программирования в мире.