python - 如何使用分隔符拆分 pandas 中的列并在此过程中分配自定义唯一名称?

标签 python pandas split

我想拆分一个混合 block 并分别为每一列分配字母:

M1 M2 M3 M4 hybrid_block S1 S2 S3 S4                                                          
A  T  T  A   A|C         C  G  C  T 
T  G  C  T   T|A         A  T  A  T 
C  A  A  C   C|G         G  A  C  G 
G  T  G  T   G|T         C  T  T  T 

使用以下代码:

d1 = pd.concat([
    df.filter(like='M'),
    df.hybrid_block.str.split('|', expand=True).rename(columns='H{}'.format),
    df.filter(like='S')
], axis=1)

我得到的输出:

M1 M2 M3 M4 H0  H1 S1 S2 S3 S4                                                          
A  T  T  A   A  C  C  G  C  T 
T  G  C  T   T  A  A  T  A  T 
C  A  A  C   C  G  G  A  C  G 
G  T  G  T   G  T  C  T  T  T

我宁愿:

M1 M2 M3 M4 H_x  H_y S1 S2 S3 S4                                                          
A  T  T  A   A  C  C  G  C  T 
T  G  C  T   T  A  A  T  A  T 
C  A  A  C   C  G  G  A  C  G 
G  T  G  T   G  T  C  T  T  T

此外,如果有超过 1 个混合 block ,我想相应地拆分它们,通过为第一个 block 分配一个唯一的名称,如 h1_x 和 h1_yh2_x, h2_y 用于第二个 block 。

最佳答案

你也可以使用.str.extract()方法:

In [107]: d1 = pd.concat([
     ...:     df.filter(like='M'),
     ...:     df.hybrid_block.str.extract(r'(?P<H_x>[^\|]*)\|(?P<H_y>[^\|]*)', expand=True),
     ...:     df.filter(like='S')
     ...: ], axis=1)
     ...:

In [108]: d1
Out[108]:
  M1 M2 M3 M4 H_x H_y S1 S2 S3 S4
0  A  T  T  A   A   C  C  G  C  T
1  T  G  C  T   T   A  A  T  A  T
2  C  A  A  C   C   G  G  A  C  G
3  G  T  G  T   G   T  C  T  T  T

关于python - 如何使用分隔符拆分 pandas 中的列并在此过程中分配自定义唯一名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41966763/

相关文章:

python - 在目录中创建一个文件夹并将文件保存在新文件夹中

java - 从字符串中提取 2 个整数

Python要求效率

python:类与元组巨大的内存开销(?)

python - 您可以使用 pandas 在一行中从 groupby 对象创建新列吗?

python-3.x - 为 Flair 模型训练准备数据框

python - 为不同对象上的多个位置实例绘制 X Y 位置

string - 使用 flutter 分割字符串

c - 拆分字符串并使用索引调用所需的元素

python - 使用 PyQt 动态将项目设置为 QML ListModel