Получение корреляций из нескольких строк с одинаковым значением (Python)

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

Пример данных: Index Gene Duplicate of Value1 Value2 Value3 Etc. 0 Gene1 DGene1 0.1 14 13 .. 1 Gene14 DGene1 0 13 17 .. 2 Gene4 DGene3 20 0 0 .. 3 Gene90 DGene3 25 0 10 .. 4 Gene22 DGene31 0 10 0 .. 5 Gene40 DGene31 10 0.5 0 .. 6 Gene130 DGene31 10 1 0 .. 7 Gene600 DGene31 12 0 0 ..

В случае приведенного выше примера мне нужны три корреляции: 1 из генов Gene1 и Gene14, 1 из Gene4 и Gene90 и, наконец, одна из генов Gene22, Gene40, Gene130 и Gene600. Корреляции будут существовать для всех значений (Value1 и т. Д.) Из этих строк.

Я попытался сгруппировать данные по Дубликату (CGENE - Дубликат),

df_com2.groupby(CGENE).apply(lambda x: x.index.tolist())

но я не могу найти способ выбрать все значения из соответствующих генов после этого.

Любая помощь будет оценена по достоинству!


person Mark_vd_S    schedule 28.01.2016    source источник
comment
Попробуйте опубликовать код - вы получите более точные ответы   -  person ste-fu    schedule 28.01.2016
comment
Спасибо за ваше предложение! Я добавил код, который использовал для группировки данных, но он находится на более позднем этапе моего сценария, и я не уверен, какой код будет жизненно важен для публикации для этой проблемы.   -  person Mark_vd_S    schedule 28.01.2016
comment
Вы сказали, что DataFrame означает, что вы используете панды?   -  person OYRM    schedule 28.01.2016
comment
Да, я использую панды   -  person Mark_vd_S    schedule 28.01.2016


Ответы (1)


Не совсем понятно, что вы ищете из groupby, но я подозреваю, что вы ищете .agg для агрегирования полей.

Например, это даст список генов, разделенных запятыми, и среднее значение Value1:

In [26]: df
Out[26]:
   Index     Gene Duplicate_of  Value1  Value2  Value3 Etc.
0      0    Gene1       DGene1     0.1    14.0      13   ..
1      1   Gene14       DGene1     0.0    13.0      17   ..
2      2    Gene4       DGene3    20.0     0.0       0   ..
3      3   Gene90       DGene3    25.0     0.0      10   ..
4      4   Gene22      DGene31     0.0    10.0       0   ..
5      5   Gene40      DGene31    10.0     0.5       0   ..
6      6  Gene130      DGene31    10.0     1.0       0   ..
7      7  Gene600      DGene31    12.0     0.0       0   ..

In [27]: df.groupby("Duplicate_of").agg({'Gene': ', '.join, 'Value1': np.mean})
Out[27]:
                                          Gene  Value1
Duplicate_of
DGene1                           Gene1, Gene14    0.05
DGene3                           Gene4, Gene90   22.50
DGene31       Gene22, Gene40, Gene130, Gene600    8.00
person Randy    schedule 28.01.2016
comment
Спасибо за быстрый ответ! Это действительно была совокупность, которую я искал. Единственное, что мне сейчас нужно выяснить, это как я могу соотнести значения вместо получения среднего значения, как вы это сделали с np.mean. - person Mark_vd_S; 28.01.2016