首页 > 解决方案 > 如何正确使用熊猫的切片/替换为另一列的值,然后将一行分解为两列

问题描述

我正在使用如下所示的 DataFrame:

   ID         SEQ BEG_GAP END_GAP  
0  A1     ABCDEFG       2       4  
1  B1     YUUAAMN       4       6
2  C1  LKHUTYYYYA       7       9

而我要做的基本上是首先替换字符串中介于和"SEQ"的值之间的部分,然后将剩下的两段字符串分解成两条不同的行(可能使用 Panda 的explode)。"BEG_GAP""END_GAP"

即:第一个预期结果:

   ID         SEQ BEG_GAP END_GAP  
0  A1     AB---FG       2       4  
1  B1     YUUA---       4       6
2  C1  LKHUTY--YA       7       8

然后得到:

   ID         SEQ BEG_GAP END_GAP  
0  A1          AB       2       4  
1  A1          FG       2       4 
2  B1        YUUA       4       6
3  C1      LKHUTY       7       8
4  C1          YA       7       8

我正在尝试使用以下代码:

import pandas as pd

df = pd.read_csv("..\path_to_the_csv.csv")

for index, rows in df.iterrows():
    start = df["BEG_GAP"].astype(float)
    stop= df["END_GAP"].astype(float)
   
    df["SEQ"] = df["SEQ"].astype(str)
    df['SEQ'] = df['SEQ'].str.slice_replace(start=start,stop=stop,repl='-')

"SEQ"但我得到的专栏充满了 NaN。我想这与我如何使用启动和停止有关。我可以使用一些帮助,以及稍后如何根据间隙划分行。我希望我足够清楚,在此先感谢!

标签: pythonpython-3.xpandasstring

解决方案


我们试试看:

df['SEQ'] = df.apply(lambda x: [x.SEQ[:x.BEG_GAP], x.SEQ[x.END_GAP+1:]], axis=1)

output = df.explode('SEQ').query('SEQ!=""')

输出:

   ID      SEQ  BEG_GAP  END_GAP
0  A1       AB        2        4
0  A1       FG        2        4
1  B1     YUUA        4        6
2  C1  LKHUTYY        7        8
2  C1        A        7        8

推荐阅读