簡體   English   中英

如何從同一列中讀取數據中的兩行以創建該列中的值組合?

[英]How to read two lines in a data from same column to create combination of values from that column?

在以下數據中:

M1  M2  M3  M4  M5  M6  M7  M8  Hx Hy    S1    S2    S3    S4
A   T   T   A   A   G   A   C   A   C    C     G     C     T
A   T   T   A   A   G   A   C   A   C    C     G     C     T
T   G   C   T   G   T   T   G   T   A    A     T     A     T
C   A   A   C   A   G   T   C   C   G    G     A     C     G
G   T   G   T   A   T   C   T   G   T    C     T     T     T

使用了以下代碼:

d1 = d1.add('g').add(d1.shift()).dropna()

要得到:

M1   M2   M3   M4   M5   M6   M7   M8   H0   H1   S1   S2   S3   S4                                                                         
AgA  TgT  TgT  AgA  AgA  GgG  AgA  CgC  AgA  CgC  CgC  GgG  CgC  TgT   
TgA  GgT  CgT  TgA  GgA  TgG  TgA  GgC  TgA  AgC  AgC  TgG  AgC  TgT   
CgT  AgG  AgC  CgT  AgG  GgT  TgT  CgG  CgT  GgA  GgA  AgT  CgA  GgT   
GgC  TgA  GgA  TgC  AgA  TgG  CgT  TgC  GgC  TgG  CgG  TgA  TgC  TgG 

但是,如果數據具有以下結構:

M1   M2   M3  M4     Hx  Hy   S1  S2        pos  
A/T  T/A  A/G  G/G    A    C    C/G  C/T    2
A/T  T/A  A/G  G/G    G    T    C/G  C/T    12
T/G  C/T  G/T  T/G    C    G    T/T  T/T    16
T/T  T/T  T/T  T|T    G    T    T/T  T/T    17

相反,我想要除pos之外的每一列的所有可能字母(前一行和當前行之間)的組合。

所以,它會是這樣的:

M1                M2               Hx    Hy      S1                S2                                               
AgA,AgT,TgA,TgT  TgT,TgA,AgT,AgA   AgA   TgC   CgC,CgG,GgC,GgG    CgC,CgT,TgC,TgT
TgA,TgT,GgA,GgT ....
so on for all other line

我正在添加一個矩陣來理解這個過程:

values from previous line in m1 (at pos 12)
                                  A       T
value from next            T     TgA     TgT
next line  pos 16 ->       G     GgA     GgT

我嘗試使用 itertools 將每一行中的值保留為字典列表:

for row in d1_group.iterrows():
    index, data = row
    temp.append(data.tolist())
print(temp)

接下來,想法是使用索引(或 pos)作為鍵,然后在相鄰的索引(或 pos)值之間創建組合。

使用熊貓或字典來做這件事的任何可能性。

謝謝,

前言:

import itertools as it

list(it.product(['A'], ['T']))
Out[229]: [('A', 'T')]

list(it.product(['A', 'T'], ['T', 'G']))
Out[230]: [('A', 'T'), ('A', 'G'), ('T', 'T'), ('T', 'G')]

','.join('g'.join(t) for t in it.product(['A'], ['T']))
Out[231]: 'AgT'

','.join('g'.join(t) for t in it.product(['T', 'G'],['A', 'T']))
Out[233]: 'TgA,TgT,GgA,GgT'

因此,讓我們構建一個包含以下內容的數據框:

df=df.applymap(lambda c: [[c]])

df
Out[258]: 
      M1     M2     M3     M4     M5     M6     M7     M8     Hx     Hy  \
0  [[A]]  [[T]]  [[T]]  [[A]]  [[A]]  [[G]]  [[A]]  [[C]]  [[A]]  [[C]]   
1  [[A]]  [[T]]  [[T]]  [[A]]  [[A]]  [[G]]  [[A]]  [[C]]  [[A]]  [[C]]   
2  [[T]]  [[G]]  [[C]]  [[T]]  [[G]]  [[T]]  [[T]]  [[G]]  [[T]]  [[A]]   
3  [[C]]  [[A]]  [[A]]  [[C]]  [[A]]  [[G]]  [[T]]  [[C]]  [[C]]  [[G]]   
4  [[G]]  [[T]]  [[G]]  [[T]]  [[A]]  [[T]]  [[C]]  [[T]]  [[G]]  [[T]]  

(df+df.shift(1)).dropna(how='all').applymap(lambda c: ','.join('g'.join(t)
                                                      for t in it.product(*c)))
Out[266]: 
    M1   M2   M3   M4   M5   M6   M7   M8   Hx   Hy   S1   S2   S3   S4
1  AgA  TgT  TgT  AgA  AgA  GgG  AgA  CgC  AgA  CgC  CgC  GgG  CgC  TgT
2  TgA  GgT  CgT  TgA  GgA  TgG  TgA  GgC  TgA  AgC  AgC  TgG  AgC  TgT
3  CgT  AgG  AgC  CgT  AgG  GgT  TgT  CgG  CgT  GgA  GgA  AgT  CgA  GgT
4  GgC  TgA  GgA  TgC  AgA  TgG  CgT  TgC  GgC  TgG  CgG  TgA  TgC  TgG

現在對夫婦來說也一樣,只是做了更多的清理/准備工作:

df.set_index('pos', inplace=True)

df
Out[273]: 
      M1   M2   M3   M4 Hx Hy   S1   S2
pos                                    
2    A/T  T/A  A/G  G/G  A  C  C/G  C/T
12   A/T  T/A  A/G  G/G  G  T  C/G  C/T
16   T/G  C/T  G/T  T/G  C  G  T/T  T/T
17   T/T  T/T  T/T  T|T  G  T  T/T  T/T

df = df.applymap(lambda c: [c.split('/')])
df
Out[274]: 
           M1        M2        M3        M4     Hx     Hy        S1        S2
pos                                                                          
2    [[A, T]]  [[T, A]]  [[A, G]]  [[G, G]]  [[A]]  [[C]]  [[C, G]]  [[C, T]]
12   [[A, T]]  [[T, A]]  [[A, G]]  [[G, G]]  [[G]]  [[T]]  [[C, G]]  [[C, T]]
16   [[T, G]]  [[C, T]]  [[G, T]]  [[T, G]]  [[C]]  [[G]]  [[T, T]]  [[T, T]]
17   [[T, T]]  [[T, T]]  [[T, T]]   [[T|T]]  [[G]]  [[T]]  [[T, T]]  [[T, T]]



(df+df.shift(1)).dropna(how='all').applymap(lambda c: ','.join('g'.join(t) for t in it.product(*c)))
Out[276]: 
                  M1               M2               M3               M4   Hx  \
pos                                                                            
12   AgA,AgT,TgA,TgT  TgT,TgA,AgT,AgA  AgA,AgG,GgA,GgG  GgG,GgG,GgG,GgG  GgA   
16   TgA,TgT,GgA,GgT  CgT,CgA,TgT,TgA  GgA,GgG,TgA,TgG  TgG,TgG,GgG,GgG  CgG   
17   TgT,TgG,TgT,TgG  TgC,TgT,TgC,TgT  TgG,TgT,TgG,TgT      T|TgT,T|TgG  GgC   

      Hy               S1               S2  
pos                                         
12   TgC  CgC,CgG,GgC,GgG  CgC,CgT,TgC,TgT  
16   GgT  TgC,TgG,TgC,TgG  TgC,TgT,TgC,TgT  
17   TgG  TgT,TgT,TgT,TgT  TgT,TgT,TgT,TgT  

您現在可以重置索引並取回pos 您可能需要通過移動和適當對齊來進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM