有没有办法找到序列在数据帧中重复的次数?
假设我有一个包含大量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
我想根据我想要找到的序列的长度一次分析各个部分。按数据帧的数字顺序。
我的数据采用日期和时间格式。但我可以改变这一点。
感谢您的帮助,我非常感谢大家在这个网站上所做的一切。
答案 0 :(得分:2)
curr
答案 1 :(得分:0)
这会将数字列表转换为逗号分隔的字符串,然后将每个连续的块与目标进行比较。
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']
答案 2 :(得分:0)
将整数列表转换为字符串。
使用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)))