如何在pandas

时间:2016-10-24 04:10:47

标签: python pandas

作为一个例子。

两个数据集。一个小时内收集一个。一小时内在20分钟内收集一次。

每个数据集都包含可以转换为true(-)或false(_)单个列的事件实例,表示事件是否正在发生。

DS1.event:

_-__-_--___----_-__--_-__---__

DS2.event:

__--_-__--

我正在寻找一种方法来自动化两个数据集的相关性(如果术语不正确,请更正),并找到DS1最多(最多x个)的DS1偏移量已经发生了。这可能最终会得到一些匹配百分比,然后我可以通过阈值来确定匹配的有效性。

这样

_-__-_--___----_-__--_-__---__
                 __--_-__--

DS1.start + 34min~ = DS2.start

其他信息:
以约1Hz记录DS1。 DS2约为30 Hz。这样就不太可能实现100%的干净匹配。

我会赞赏替代方法(对熊猫),但我掌握的是python / pandas。

1 个答案:

答案 0 :(得分:3)

听起来你只想要一个像交叉相关的东西?

我首先将字符串转换为数字表示形式,因此请将-_替换为10

您可以使用字符串replace方法(例如signal.replace("-", "1")

来实现

将它们转换为列表或numpy数组:

event1 = [int(x) for x in signal1]
event2 = [int(x) for x in signal2]

然后计算它们之间的互相关:

xcor = np.correlate(event1, event2, "full")

这将为您提供每个时间滞后的互相关值。您只想找到最大的值,以及它发生的时间间隔:

nR = max(xcor)
maxLag = np.argmax(xcor)  # I imported numpy as np here

给你类似的东西:

Cross correlation value: 5
Lag: 20

听起来你对这里的滞后价值更感兴趣。滞后告诉您的是,为了获得2个信号之间的最大互相关值(匹配程度),需要多少时间/位置偏移

您可能需要查看np.correlatenp.convolve的文档,以确定您希望使用的方法(完整,相同或有效),因为数据长度决定了如果您的信号长度不同,您希望发生什么