使用python查找序列在数据框中重复的次数
Posted
技术标签:
【中文标题】使用python查找序列在数据框中重复的次数【英文标题】:finding how many times a sequence repeats in a data frame using python 【发布时间】:2016-09-14 06:36:43 【问题描述】:有没有办法找出一个序列在数据框中重复了多少次?
假设我有一个包含大量 1 和 3 的数据框,我想看看这个序列 [3,1,3,3,1] 重复了多少次。
这是一个示例列表。 3,1,3,3,1,3,3,1,3,3,1,3,1,1,1,1,3,1,3,1,1,3,3,3
这是我正在尝试做的一个示例
第一部分是真的3,1,3,3,1,3,3,1,3,3,1,3,1,1,1,1,3, 1,3,1,1,3,3,3
第二部分是假的 3,1,3,3,1,3,3,1,3,3,1,3,1,1,1,1,3, 1,3,1,1,3,3,3
第三部分是假的 3,1,3,3,1,3,3,1,3,3,1,3,1,1,1,1,3,1,3,1,1,3 ,3,3
我想根据我要查找的序列长度一次分析部分。按照数据框的数字顺序。
我的数据采用日期和时间格式。但我可以改变这一点。
感谢您的所有帮助,我非常感谢每个人在本网站上所做的一切。
【问题讨论】:
【参考方案1】:my_list = np.array([3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 1, 1, 1, 1, 3, 1, 3, 1, 1, 3, 3, 3])
target = np.array([3, 1, 3, 3, 1])
(my_list.reshape(-1, len(sequence)) == sequence[None, :]).all(axis=1)
【讨论】:
虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。【参考方案2】:这会将数字列表转换为逗号分隔的字符串,然后将每个顺序块与目标进行比较。
from itertools import izip_longest
my_list = [3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 1, 1, 1, 1, 3, 1, 3, 1, 1, 3, 3, 3]
target = [3, 1, 3, 3, 1]
n = len(target)
>>> sum(all(a == b for a, b in izip_longest(target, my_list[(i * n):((i + 1) * n)]))
for i in range(len(my_list) // n))
1
下面是另一种方法,将整数转换为字符串,然后比较字符串。
target = ",".join(str(number) for number in target)
>>> target
'3,1,3,3,1'
>>> sum(",".join(str(number) for number in my_list[(i * n):(i * n + n)]) == target
for i in range(len(my_list) / n))
1
为了更直观地了解正在发生的事情,列表一次分成五个元素,然后将这些元素连接为一个字符串。然后将这些字符串与经过类似转换的目标字符串进行比较,然后将匹配的数量相加。
>>> [",".join(str(number) for number in my_list[(i * n):(i * n + n)])
for i in range(len(my_list) / n)]
['3,1,3,3,1', '3,3,1,3,3', '1,3,1,1,1', '1,3,1,3,1']
【讨论】:
有没有办法让它不使用它刚刚检查的序列中的相同数字。这很难解释。就像它检查前五个然后检查下一个不按该顺序排列的五个。示例将更好地解释它。检查这些 3,1,3,3,1,3,3,1,3,3,1,3,1,1,1,1,3,1,3,1,1 ,3,3,3 然后检查这些 3,1,3,3,1,3,3,1,3,3,1,3,1,1,1,1,3, 1,3,1,1,3,3,3 等等等等 这么快吧?你是你手艺人的真正大师。我一直在考虑这个问题哈哈谢谢真的很感激!!!【参考方案3】:步骤1
将整数列表转换为字符串。
第二步
使用regex模块的findall()函数查找target_string
在my_list_string
中的所有出现。
import re
my_list = [3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 1, 1, 1, 1, 3, 1, 3, 1, 1, 3, 3, 3]
target = [3, 1, 3, 3, 1]
my_list_string = ''.join(str(e) for e in my_list)
target_string = ''.join(str(e) for e in target)
print(len(re.findall(target_string, my_list_string)))
【讨论】:
以上是关于使用python查找序列在数据框中重复的次数的主要内容,如果未能解决你的问题,请参考以下文章