python - 如何正确使用熊猫的切片/替换为另一列的值,然后将一行分解为两列
问题描述
我正在使用如下所示的 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。我想这与我如何使用启动和停止有关。我可以使用一些帮助,以及稍后如何根据间隙划分行。我希望我足够清楚,在此先感谢!
解决方案
我们试试看:
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
推荐阅读
- python - 处理和返回一组组中的数据
- c++ - 从编辑中获取价值以使用区域
- mysql - 使用 TOAD for Mysql 调试 Mysql 存储过程
- javascript - 在数组中按单个字符搜索对象
- r - 使用两个 csv 文件(两个文件都有 2 列),我们如何在 R 中绘制(作为单个网络图)节点列表和边缘列表社交网络分析?
- android - 在androud studio arctic fox 2020.3.1中构建APK时如何生成output.json而不是output-metadata.json
- typescript - 使用 TypeScript 在 Quasar 中声明第三方模块
- excel - 当值在另一个单元格中更改时存储新的数据行 - 更改值宏
- c# - 如何在基类中实例化泛型类型?
- javascript - 无法读取未定义的属性(读取“插值”)