Skip to main content
 首页 » 编程设计

python之在 Python 中对齐两个数据集

2025年05月04日16unruledboy

我想开发一些 python 代码来对齐由记录同一事件的不同仪器获得的数据集。

举个例子,假设我有两组测量值:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
 
# Define some data 
data1 = pd.DataFrame({'TIME':[1.1, 2.4, 3.2, 4.1, 5.3],\ 
                      'VALUE':[10.3, 10.5, 11.0, 10.9, 10.7],\ 
              'ERROR':[0.2, 0.1, 0.4, 0.3, 0.2]}) 
 
data2 = pd.DataFrame({'TIME':[0.9, 2.1, 2.9, 4.2],\ 
                      'VALUE':[18.4, 18.7, 18.9, 18.8],\ 
              'ERROR':[0.3, 0.2, 0.5, 0.4]}) 
 
# Plot the data       
plt.errorbar(data1.TIME, data1.VALUE, yerr=data1.ERROR, fmt='ro') 
plt.errorbar(data2.TIME, data2.VALUE, yerr=data2.ERROR, fmt='bo') 
plt.show() 

结果绘制在这里:

我现在想做的是将第二个数据集 (data2) 与第一个数据集 (data1) 对齐。即得到这个:

必须通过从其所有值中减去一个常量(待定)来移动第二个数据集以匹配第一个数据集。我所知道的是数据集是相关的,因为这两种仪器正在测量相同的事件但采样率不同。

在这个阶段,我不想对什么函数最能描述数据做出任何假设(拟合将在对齐后完成)。

我对使用方法执行轮类持谨慎态度,因为它可能会产生不好的结果,具体取决于数据的采样方式。我正在考虑获取每个 data2[TIME_i] 并计算出到 data1[~TIME_i] 的最短距离。然后最小化这些的总和。但我也不确定这是否会奏效。

有没有人对使用的好方法有任何建议?我看了mlpy但它似乎只适用于一维阵列。

谢谢。

请您参考如下方法:

您可以减去差值的均值:data2.VALUE-(data2.VALUE - data1.VALUE).mean()

import pandas as pd 
import matplotlib.pyplot as plt 
 
# Define some data 
data1 = pd.DataFrame({ 
    'TIME': [1.1, 2.4, 3.2, 4.1, 5.3], 
    'VALUE': [10.3, 10.5, 11.0, 10.9, 10.7], 
    'ERROR': [0.2, 0.1, 0.4, 0.3, 0.2], 
}) 
 
data2 = pd.DataFrame({ 
    'TIME': [0.9, 2.1, 2.9, 4.2], 
    'VALUE': [18.4, 18.7, 18.9, 18.8], 
    'ERROR': [0.3, 0.2, 0.5, 0.4], 
}) 
 
# Plot the data 
plt.errorbar(data1.TIME, data1.VALUE, yerr=data1.ERROR, fmt='ro') 
plt.errorbar(data2.TIME, data2.VALUE-(data2.VALUE - data1.VALUE).mean(), 
             yerr=data2.ERROR, fmt='bo') 
plt.show() 

另一种可能性是减去每个系列的平均值