python - 如何在 panda DataFrame 中使用多个索引对字符串进行切片/切分
问题描述
我需要一些关于以下问题的建议:我有一个如下所示的 DataFrame:
ID SEQ LEN BEG_GAP END_GAP
0 A1 AABBCCDDEEFFGG 14 2 4
1 A1 AABBCCDDEEFFGG 14 10 12
2 B1 YYUUUUAAAAMMNN 14 4 6
3 B1 YYUUUUAAAAMMNN 14 8 12
4 C1 LLKKHHUUTTYYYYYYYYAA 20 7 9
5 C1 LLKKHHUUTTYYYYYYYYAA 20 12 15
6 C1 LLKKHHUUTTYYYYYYYYAA 20 17 18
我需要得到的是在不同的和SEQ
之间分开的。对于只有一对间隙的序列,我已经解决了(感谢之前的问题),但在这里它们有多个。BEG_GAP
END_GAP
这就是序列的样子:
ID SEQ
0 A1 AA---CDDEE---GG
1 B1 YYUU---A-----NN
2 C1 LLKKHHU---YY----Y--A
或者在分解的 DF 中:
ID Seq_slice
0 A1 AA
1 A1 CDDEE
2 A1 GG
3 B1 YYUU
4 B1 A
5 B1 NN
6 C1 LLKKHHU
7 C1 YY
8 C1 Y
9 C1 A
目前,我正在使用一段代码(感谢之前的问题),该代码仅在存在一个差距时才有效,它看起来像这样:
import pandas as pd
df = pd.read_csv("..\path_to_the_csv.csv")
df["BEG_GAP"] = df["BEG_GAP"].astype(int)
df["END_GAP"]= df["END_GAP"].astype(int)
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_slice
0 A1 AA
1 A1 CDDEEFFG #<- this one shouldn't exist! Because there's another gap in 10-12
2 A1 AABBCCDDEE #<- Also, this one shouldn't exist, it's missing the previous gap.
3 A1 GG
依此类推,与其他序列。如您所见,有些切片没有生成,有些切片是错误的,因为我不知道如何告诉代码在分析序列时记住所有的间隙。
感谢所有建议,我希望我很清楚!
解决方案
让我们尝试定义一个函数和apply
:
def truncate(data):
seq = data.SEQ.iloc[0]
ll = data.LEN.iloc[0]
return [seq[x:y] for x,y in zip([0]+list(data.END_GAP),
list(data.BEG_GAP)+[ll])]
(df.groupby('ID').apply(truncate)
.explode().reset_index(name='Seq_slice')
)
输出:
ID Seq_slice
0 A1 AA
1 A1 CCDDEE
2 A1 GG
3 B1 YYUU
4 B1 AA
5 B1 NN
6 C1 LLKKHHU
7 C1 TYY
8 C1 YY
9 C1 AA
推荐阅读
- azure - 自定义策略不尊重电子邮件操作模式
- python - 使用 python 从网站访问数据会产生不完整的网站数据
- bash - 如何从 ls 中对文件大小求和,例如带有字节、KiB、MiB、GiB 的输出日志
- ionic-framework - ionic 5 - 仅当用户按下输入/确认搜索时,如何使用离子搜索栏在服务器上搜索
- discord - 不和谐.JS | 检查频道是否存在票务机器人
- angular - 如果检查,有没有更好的方法来删除这个打字稿代码?
- android-studio - 如何识别 IntelliJ 或 Android Studio 中的函数调用和类实例化?
- powershell - 如何在一段时间内没有输出时杀死/停止powershell进程
- python - 单独文件中的 Python 函数:它们都需要相同的参数。如何在多个文件中创建全局变量?
- javascript - 通过 mongoose 将条目推送到 MongoDB 中的多级嵌套数组