用子集替换字符串

时间:2019-12-05 03:54:43

标签: pandas

我有一个如下数据框:

s1 AA AG AG GG AA
s2 GTTGTT GTTGTT GTTGTT GTTGTT GTTGTT
S3 TT CC TC TT TC
S3 AGTTAGTT AGTTAGTT AGTTAGTT AGTTAGTT AGTTAGTT
S3 GCGCGCGC GCGCGCGC GCGCGCGC GCGCGCGC GCGCGCGC

,我想查找数据帧中具有两个以上字符的每个字符串(例如GTTGTT),并将字符串分为两部分(所有字符串都是偶数)(GTT GTT),然后从每个字符中获取第一个字符部分(GG)。所以我的数据框将是这样的:

s1 AA AG AG GG AA
s2 GG GG GG GG GG
S3 TT CC TC TT TC
S3 AA AA AA AA AA
S3 GG GG GG GG GG

任何建议都值得赞赏。预先谢谢你

1 个答案:

答案 0 :(得分:2)

一种方法是使用applymap

df = pd.DataFrame({'num': {0: 's1', 1: 's2', 2: 'S3', 3: 'S3', 4: 'S3'}, 
                   'A': {0: 'AA', 1: 'GTTGTT', 2: 'TT', 3: 'AGTTAGTT', 4: 'GCGCGCGC'}, 
                   'B': {0: 'AG', 1: 'GTTGTT', 2: 'CC', 3: 'AGTTAGTT', 4: 'GCGCGCGC'}, 
                   'C': {0: 'AG', 1: 'GTTGTT', 2: 'TC', 3: 'AGTTAGTT', 4: 'GCGCGCGC'}, 
                   'D': {0: 'GG', 1: 'GTTGTT', 2: 'TT', 3: 'AGTTAGTT', 4: 'GCGCGCGC'}, 
                   'E': {0: 'AA', 1: 'GTTGTT', 2: 'TC', 3: 'AGTTAGTT', 4: 'GCGCGCGC'}})

df.iloc[:,1:6] = df.iloc[:,1:6].applymap(lambda x: x[0]+x[len(x)//2])

print (df)

#
  num   A   B   C   D   E
0  s1  AA  AG  AG  GG  AA
1  s2  GG  GG  GG  GG  GG
2  S3  TT  CC  TC  TT  TC
3  S3  AA  AA  AA  AA  AA
4  S3  GG  GG  GG  GG  GG