【问题标题】:Sliding window over a string using python使用python在字符串上滑动窗口
【发布时间】:2021-03-06 00:26:06
【问题描述】:

作为课程练习的一部分,我正在处理数据集,但我陷入了一个特定的步骤。我已经尝试过使用 R,但我希望在 python 中做同样的事情。我对 python 比较陌生,所以需要帮助。

数据集由名称为“Seq”的列和 seq(5000+) 条记录组成。我有另一列名为“MainSeq”的列,其中包含子字符串 seq 值。我需要根据给定的起始位置检查 MainSeq 上是否存在 seq,然后在 seq 的每个字母之前和之后打印 7 个字母。 IE。 我在 col 'MainSeq' 中有一个值为 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。 Col 'Seq' 包含值 JKLMNO J= 10 和 O= 15 的起始位置

我需要创建一个新列,以便在从 J 到 O 的起始字母之前和之后需要 7 个字母,即总长度为 15

CDEFGHI**J**KLMNOPQ
DEFGHIJ**K**LMNOPQR
EFGHIJK**L**MNOPQRS
FGHIJKL**M**NOPQRST
GHIJKLM**N**OPQRSTU
HIJKLMN**O**PQRSTUV

我知道将逻辑应用于特定的序列。但由于我有大约 5000 多条 seq 记录,我需要想办法在所有 seq 记录上应用相同的记录。

seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
i = seq.index('J')
j = seq.index('O')
value = 7
for mid in range(i, 1+j):
    print(seq[mid-value:mid+value+1])

【问题讨论】:

  • “J”和“O”从何而来?
  • JKLMNO 是 col 'seq' 下的 seq,属于 col 'MainSeq' 中的 seq。对于 col 'seq' 下的所有此类值,我需要执行上述步骤。

标签: python-3.x dataframe jupyter-notebook data-science


【解决方案1】:

我不确定这是否完全符合您的要求,您并没有真正提供大量数据进行测试,但它可能会起作用或至少让您有一个开始。

import pandas as pd

df = pd.DataFrame({'MainSeq':['ABCDEFGHIJKLMNOPQRSTUVWZYZ','ABCDEFGHIJKLMNOPQRSTUVWZYZ'], 'Seq':'JKLMNO'})

def get_sequences(seq, letters, value):
  
  sequences = [seq[seq.index(letter)-value:seq.index(letter)+value+1] for letter in letters]
  return sequences

df['new_seq'] = df.apply(lambda row : get_sequences(row['MainSeq'], row['Seq'], 7), axis = 1) 

df = df.explode('new_seq')

print(df)

【讨论】:

  • 谢谢,我可以知道如何将它应用于列的一大堆值吗?即 MainSeq 包含大约 5000 多条记录
  • 代码应该适用于整个列。在我发布的代码中,我只是复制了第二行的数据,因为我没有其他工作可做。
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 2020-03-23
  • 2019-10-28
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多