使用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_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)))

【讨论】:

以上是关于使用python查找序列在数据框中重复的次数的主要内容,如果未能解决你的问题,请参考以下文章

平均观察在 Pandas 数据框中出现的总次数 [重复]

错误:计算数据框中的出现次数时无需重复

Python:计算python数据框中每个数字的出现次数

列表 - 如何查找项目出现的次数[重复]

使用 Hive 或 Pig 在字段中查找重复次数最多的值

在熊猫时间序列数据框中删除重复项