Как добавить столбцы в файл с одинаковым значением, добавив значение элементов в другие столбцы? - PullRequest
1 голос
/ 06 марта 2020

Я использовал следующий скрипт для генерации вывода

#import necessary packages
import pandas as pd
#read the files 
df=pd.read_table("abc.txt", sep="\t")
df2=pd.read_table("xyz.txt", sep="\t")

#make groups
gt30 = df.groupby(['#START','#END'])['#DEPTH'].apply(lambda x: x[x>=30].count()).rename('gt30')
gt40 = df.groupby(['#START','#END'])['#DEPTH'].apply(lambda x: x[x>=40].count()).rename('gt40')
gt50 = df.groupby(['#START','#END'])['#DEPTH'].apply(lambda x: x[x>=50].count()).rename('gt50')

#append groups
df2.merge(gt30, on='#START').merge(gt40, on='#START').merge(gt50, on='#START')

и вывод выглядит следующим образом

CHR     #START      #END      #GENE   #MEAN     #gt30 #gt40 #gt50
chr1    11106936    11107192    MTOR    24.4648438  74  0   0
chr1    11107388    11107655    MTOR    17.1910114  27  0   0
chr1    11108018    11108369    MTOR    29.2108269  140 82  0
chr1    11109097    11109459    MTOR    12.6104975  0   0   0
chr1    15872788    15873080    SPEN    36.9075356  162 109 100
chr1    15873083    15873203    SPEN    33.25   64  42  24
chr1    15874162    15874419    SPEN    26.0272369  73  0   0
chr1    15876191    15876757    SPEN    41.5477028  429 378 229
chr2    99551491    99551743    AFF3    41.4325409  191 149 75
chr2    99554298    99554464    AFF3    214.3433685 166 166 166
chr2    99554649    99554839    AFF3    59.5315781  155 143 134
chr2    99558760    99559106    AFF3    44.6445084  265 199 162
chr2    99560255    99560503    AFF3    25.0040321  116 48  0
chr2    99565418    99565659    AFF3    33.5684662  137 94  38

output

Теперь я хочу чтобы добавить все "#GENE" вместе и создать новый файл следующим образом

#CHR    #START      #END        #GENE   #MEAN     #gt30  #gt40 #gt50 
chr1    11106936    11109459    MTOR    83.4771796  241    82   0    
chr1    15872788    15876757    SPEN    36.9075356  728   529   353  

это делается путем добавления столбцов для "# MEAN, # gt30, # gt40, # gt50" # START без изменений, и # END изменено последнее значение # GENE в столбце # END .

1 Ответ

1 голос
/ 06 марта 2020

Вы можете сделать это по-своему.

Непонятно, что вы хотите в столбце #sum_sub Вы можете объяснить, как немного?

(df.groupby('#GENE', sort=False).agg(MEAN=('#MEAN', 'sum'),
                         gt30=('#gt30', 'sum'),
                         gt40=('#gt40', 'sum'),
                         gt50=('#gt50', 'sum'),
                         START=('#START','first'),
                         END=('#END','last')).reset_index())

Вывод

    #GENE   MEAN        gt30    gt40    gt50    START       END
0   MTOR    83.477180   241     82      0       11106936    11109459
1   SPEN    137.732475  728     529     353     15872788    15876757
2   AFF3    418.524494  1030    799     575     99551491    99565659
...