使用python查找序列在数据帧中重复的次数

时间:2016-05-18 00:35:06

标签: python-2.7 numpy pandas math scipy

有没有办法找到序列在数据帧中重复的次数?

假设我有一个包含大量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

我想根据我想要找到的序列的长度一次分析各个部分。按数据帧的数字顺序。

我的数据采用日期和时间格式。但我可以改变这一点。

感谢您的帮助,我非常感谢大家在这个网站上所做的一切。

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)

步骤1

将整数列表转换为字符串。

步骤2

使用regex模块的 findall()功能查找target_stringmy_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)))