如何在pandas中找到两个数据集的对齐方式

Gav*_*n S 3 python pandas

作为一个例子提出。

两个数据集。其中一份是在 1 小时内收集的。其中一个在 1 小时内收集了 20 分钟的时间。

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

DS1.事件:

_-__-_--___----_-__--_-__---__
Run Code Online (Sandbox Code Playgroud)

DS2.事件:

__--_-__--
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来自动关联两个数据集(如果术语不正确,请纠正我),并找到 DS1 中最有可能出现 DS2(前 x 许多)的偏移量。这可能最终会得到一些匹配百分比,然后我可以通过阈值来确定匹配的有效性。

这样

_-__-_--___----_-__--_-__---__
                 __--_-__--
Run Code Online (Sandbox Code Playgroud)

DS1.启动 + 34 分钟 ~= DS2.启动

附加信息:
DS1 的录制频率约为 1 Hz。DS2 频率约为 30 Hz。这使得 100% 干净比赛的可能性降低。

替代方法(pandas)将受到赞赏,但 python/pandas 是我可以使用的。

Sim*_*mon 5

听起来你只是想要互相关之类的东西?

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

您可以使用字符串replace方法来做到这一点(例如signal.replace("-", "1")

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

event1 = [int(x) for x in signal1]
event2 = [int(x) for x in signal2]
Run Code Online (Sandbox Code Playgroud)

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

xcor = np.correlate(event1, event2, "full")
Run Code Online (Sandbox Code Playgroud)

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

nR = max(xcor)
maxLag = np.argmax(xcor)  # I imported numpy as np here
Run Code Online (Sandbox Code Playgroud)

给你类似的东西:

Cross correlation value: 5
Lag: 20
Run Code Online (Sandbox Code Playgroud)

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

您可能需要查看文档np.correlatenp.convolve确定要使用的方法(完整、相同或有效),因为这取决于数据的长度以及信号长度不同时希望发生的情况