Как можно использовать функцию apply в пандах при отображении индекса на два разных кадра данных? - PullRequest
1 голос
/ 10 апреля 2019

Я работаю с двумя панелями данных pandas: alignmentdf и genbankdf.

alignmentdf содержит «выравнивание последовательности ДНК» в качестве кадра данных, с индексом в качестве «идентификаторов таксономии», это просто целые числа и столбцы, представляющие номера кодонов (в виде целых чисел)

genbankdf содержит данные об «использовании кодонов» для всех известных таксономий, поэтому снова с индексом снова идентификаторы таксономии и столбцы, представляющие частоты кодонов на 1000 кодонов.

Я хочу создать новый фрейм данных, df3, который будет проходить столбец за столбцом в alignmentdf, проходить по строкам, находить соответствующий индекс (т. Е. Таксономический идентификатор) в genbankdf, выполнять вычисления с использованием значений в genbankdf в зависимости от того, какой кодон «У меня есть файл alignmentdf, и я вывожу его в df3, который во всех отношениях идентичен alignmentdf, но кодоны заменяются вычисленными значениями.

Я новичок в модуле pandas, и я сделал несколько учебных пособий с использованием поиска на youtube и google - и я подозреваю, что мне, возможно, придется использовать функцию ".apply", но я озадачен синтаксисом, который мне нужен для выполнения Я хочу.

alignmentdf.head(5)
Out[38]: 
                                                       0    1    2    3    \
1076443  gi|1361169408|ref|WP_106366082.1| NAD(P)-depen...  ATG  AAA  GCC   
1076450  gi|1184222407|gb|OSC61482.1| alcohol dehydroge...  ATG  AAA  GCC   
110934   gi|947160360|ref|WP_055933433.1| MULTISPECIES:...  ATG  AAG  GCG   
1156841  gi|517339444|ref|WP_018514936.1| NAD(P)-depend...  ATG  AAA  GCC   
1156844  gi|517353486|ref|WP_018528978.1| NAD(P)-depend...  ATG  AAG  GCA   

         4    5    6    7    8    9   ...   345  346  347  348  349  350  351  \
1076443  CTG  CAA  TAC  CGC  GAG  ATC ...   GGG  CGC  GCG  GTG  ATC  CTG  CCG   
1076450  GTT  CAG  TAC  CGA  GCC  GTC ...   GGC  AGG  GCC  GTC  ATC  CTC  CCC   
110934   CTC  CAG  TAC  ACG  ACC  ATC ...   GGT  CGC  GCG  GTG  ATC  CTG  CCC   
1156841  GTC  CAG  TAC  CGG  GCC  GTC ...   GGC  CGC  GCG  GTG  ATC  CTG  CCG   
1156844  CTG  CAG  TAC  CGG  AGC  GTC ...   GGC  CGC  GCG  GTG  ATC  CTG  CCC   

         352  353  354  
1076443  ---  ---  TGA  
1076450  ---  ---  TGA  
110934   ---  ---  TGA  
1156841  ---  ---  TGA  
1156844  ---  ---  TGA  

[5 rows x 355 columns]
genbankdf.head(5)
Out[40]: 
        Division Assembly                                Species Organelle  \
Taxid                                                                        
939668   genbank      NaN  gamma proteobacterium SCGC AAA240-C10   genomic   
1938820  genbank      NaN                 Serratia sp. JKS000199   genomic   
768468   genbank      NaN  Dulcina sp. TB-2010 gill endosymbiont   genomic   
1549058  genbank      NaN               Bradyrhizobium sp. dxwr4   genomic   
477226   genbank      NaN                    Pseudomonas sp. SY6   genomic   

        Translation Table  # CDS  # Codons    GC%   GC1%   GC2%  ...     CGA  \
Taxid                                                            ...           
939668                 11      1       122  59.02  58.20  46.72  ...       1   
1938820                11   4700   1498667  61.12  63.10  42.49  ...    2886   
768468                 11      1       165  51.72  61.21  40.61  ...       0   
1549058                11      5       993  60.99  61.23  40.89  ...       1   
477226                 11      1       230  66.38  65.65  47.39  ...       1   

           CGG   AGT    AGC   AGA   AGG    GGT    GGC   GGA    GGG  
Taxid                                                               
939668       3     0      3     0     0      6      1     1      2  
1938820  14562  4320  35109  1770  1655  14372  79485  4405  17593  
768468       0     0      0     0     0     16      3     0      0  
1549058     10     2     11     1     3     21     53     8      6  
477226       3     0      6     0     1      1      8     0      4  

[5 rows x 75 columns]

Я ожидаю, что кадр данных (df3) будет идентичен выравниванию df, но кодон заменяется вычислением «смещения использования кодона», определяемого значениями в строке genbankdf с тем же индексом, что и alignmentdf.

1 Ответ

1 голос
/ 10 апреля 2019

Используйте DataFrame.lookup в цикле, поскольку работаете с несколькими столбцами:

print (alignmentdf)
                                                        0    1    2    3
1076443  gi|1361169408|ref|WP_106366082.1| NAD(P)-depen  ATG  AAA  GCC
1076450  gi|1184222407|gb|OSC61482.1| alcohol dehydroge  ATG  AAA  GCC
110934   gi|947160360|ref|WP_055933433.1| MULTISPECIES:  ATG  AAG  GCG
1156841  gi|517339444|ref|WP_018514936.1| NAD(P)-depend  ATG  AAA  GCC
1156800  gi|517353486|ref|WP_018528978.1| NAD(P)-depend  ATG  AAG  GCA  

print (genbankdf)
           ATG   AAA    GCC   AAG   GCG    GGT    GGC    GCA # Codons
110934       0     0      0     0     0     16      3      0      100
1076443      3     0      3     0     0      6      1      2      100
1156841     10     2     11     1     3    ---      8      6      100
1076450  14562  4320  35109  1770  1655  14372  79485  17593      ---
1156844     30     1      4     5     6      3      2      1      100
1156844      3     0      6     0     1      1      8      0       10

#remove duplicates in index, add missing values to genbankdf for correct mach
genbankdf = genbankdf[~genbankdf.index.duplicated()]
genbankdf = genbankdf.reindex(genbankdf.index.union(alignmentdf.index))
genbankdf['---'] = np.nan
print (genbankdf)
             ATG     AAA      GCC     AAG     GCG    GGT      GGC      GCA  \
110934       0.0     0.0      0.0     0.0     0.0     16      3.0      0.0   
1076443      3.0     0.0      3.0     0.0     0.0      6      1.0      2.0   
1076450  14562.0  4320.0  35109.0  1770.0  1655.0  14372  79485.0  17593.0   
1156800      NaN     NaN      NaN     NaN     NaN    NaN      NaN      NaN   
1156841     10.0     2.0     11.0     1.0     3.0    ---      8.0      6.0   
1156844     30.0     1.0      4.0     5.0     6.0      3      2.0      1.0   

        # Codons  
110934       100  
1076443      100  
1076450      ---  
1156800      NaN  
1156841      100  
1156844      100  

s = pd.to_numeric(genbankdf['# Codons'], errors='coerce') * 1000
df3 = alignmentdf.copy()
for c in alignmentdf.columns[1:]:
    df3[c] = genbankdf.lookup(alignmentdf.index, alignmentdf[c])
    df3[c] = pd.to_numeric(df3[c], errors='coerce').div(s)
print (df3)
                                                      0        1        2  \
1076443  gi|1361169408|ref|WP_106366082.1| NAD(P)-depen  0.00003  0.00000   
1076450  gi|1184222407|gb|OSC61482.1| alcohol dehydroge      NaN      NaN   
110934   gi|947160360|ref|WP_055933433.1| MULTISPECIES:  0.00000  0.00000   
1156841  gi|517339444|ref|WP_018514936.1| NAD(P)-depend  0.00010  0.00002   
1156800  gi|517353486|ref|WP_018528978.1| NAD(P)-depend      NaN      NaN   

               3  
1076443  0.00003  
1076450      NaN  
110934   0.00000  
1156841  0.00011  
1156800      NaN  
...