Skip to main content
 首页 » 编程设计

python之Pandas 数据框 : Split multiple columns each into two columns

2025年05月04日24JustinYoung

我有一个名为 df 的 pandas 数据框,如下所示:

0   2J-AAB1 AA  AA  CC  CC  AA  AA  CC  AA  CC 
1   2J-AAB4 AA  TA  TC  TC  GA  AA  CC  AA  CC 
2   2J-AAB6 AA  TA  CC  CC  AA  AA  CC  AA  CC 
3   2J-AAB8 AA  TT  TT  TT  GG  AA  TC  CC  CC 
4   2J-AAB9 AA  TT  TT  TT  GG  AA  TC  CC  CC 
5   2J-AABA AA  AA  CC  CC  GA  AG  CC  AA  CG 
6   2J-AABE AA  TT  TT  TT  GG  AA  TC  CA  CC 
7   2J-AABF AA  AA  CC  CC  AA  AA  CC  AA  CC 
8   2J-AABH AA  TT  TT  TT  GG  AA  CC  AA  CC 
9   2J-AABI AA  AA  CC  CC  AA  AA  CC  AA  CG 

我想将“AA、AT、CC”等列拆分为两列,并获得新的数据框,如:

0   2J-AAB1 A   A   A   A   C   C   C   C   A   A   A   A   C   C   A   A   C   C 
1   2J-AAB4 A   A   T   A   T   C   T   C   G   A   A   A   C   C   A   A   C   C 
2   2J-AAB6 A   A   T   A   C   C   C   C   A   A   A   A   C   C   A   A   C   C 
3   2J-AAB8 A   A   T   T   T   T   T   T   G   G   A   A   T   C   C   C   C   C 
4   2J-AAB9 A   A   T   T   T   T   T   T   G   G   A   A   T   C   C   C   C   C 
5   2J-AABA A   A   A   A   C   C   C   C   G   A   A   G   C   C   A   A   C   G 
6   2J-AABE A   A   T   T   T   T   T   T   G   G   A   A   T   C   C   A   C   C 
7   2J-AABF A   A   A   A   C   C   C   C   A   A   A   A   C   C   A   A   C   C 
8   2J-AABH A   A   T   T   T   T   T   T   G   G   A   A   C   C   A   A   C   C 
9   2J-AABI A   A   A   A   C   C   C   C   A   A   A   A   C   C   A   A   C   G 

是否有一种 pythonic 的方法来实现它?任何建议表示赞赏..提前致谢

请您参考如下方法:

试试这个:

In [60]: x = df.set_index(1).stack().str.extractall('(.)').unstack([-2, -1]).reset_index() 
 
In [61]: x.columns = np.arange(len(x.columns)) 
 
In [62]: x 
Out[62]: 
        0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 
0  2J-AAB1  A  A  A  A  C  C  C  C  A  A  A  A  C  C  A  A  C  C 
1  2J-AAB4  A  A  T  A  T  C  T  C  G  A  A  A  C  C  A  A  C  C 
2  2J-AAB6  A  A  T  A  C  C  C  C  A  A  A  A  C  C  A  A  C  C 
3  2J-AAB8  A  A  T  T  T  T  T  T  G  G  A  A  T  C  C  C  C  C 
4  2J-AAB9  A  A  T  T  T  T  T  T  G  G  A  A  T  C  C  C  C  C 
5  2J-AABA  A  A  A  A  C  C  C  C  G  A  A  G  C  C  A  A  C  G 
6  2J-AABE  A  A  T  T  T  T  T  T  G  G  A  A  T  C  C  A  C  C 
7  2J-AABF  A  A  A  A  C  C  C  C  A  A  A  A  C  C  A  A  C  C 
8  2J-AABH  A  A  T  T  T  T  T  T  G  G  A  A  C  C  A  A  C  C 
9  2J-AABI  A  A  A  A  C  C  C  C  A  A  A  A  C  C  A  A  C  G