基线减法/删除数据帧(Python)

基线减法/删除数据帧(Python),python,pandas,matplotlib,baseline,Python,Pandas,Matplotlib,Baseline,我有一些细胞发光的实验延时数据。不幸的是,基线会随着时间的推移而变化(例如,见附图),这使得分析数据变得更加困难。对于不同的样本,基线的变化方式有所不同(例如,有些是线性减少/增加) 我想知道是否有办法删除数据帧中每列的基线。我已经研究了scipy的signal.detrend,但由于它不是完全线性的,所以在这种情况下它似乎没有什么用处。在发布这个问题之前,我已经搜索了好几天,但我还没有找到一个合适的解决方案。我考虑过绘制局部极小值并减去它们,但我发现这是一个太钝的工具,不明智地在由40列组成的

我有一些细胞发光的实验延时数据。不幸的是,基线会随着时间的推移而变化(例如,见附图),这使得分析数据变得更加困难。对于不同的样本,基线的变化方式有所不同(例如,有些是线性减少/增加)

我想知道是否有办法删除数据帧中每列的基线。我已经研究了scipy的signal.detrend,但由于它不是完全线性的,所以在这种情况下它似乎没有什么用处。在发布这个问题之前,我已经搜索了好几天,但我还没有找到一个合适的解决方案。我考虑过绘制局部极小值并减去它们,但我发现这是一个太钝的工具,不明智地在由40列组成的整个数据帧上实现

我还发现peakutils基线模块,但我发现它不令人满意。有什么我错过的吗?这在实验数据中应该不是一个独特的问题,所以如果SciPy没有一个合适的模块,我会非常惊讶。下面是一个数据类型的示例,我希望能够从中减去基线,有效地消除周期性并使其或多或少线性化

import numpy as np    
n = 1000
limit_low = 0
limit_high = 0.48
my_data = np.random.normal(0, 0.5, n) \
      + np.abs(np.random.normal(0, 2, n) \
               * np.sin(np.linspace(0, 3*np.pi, n)) ) \
      + np.sin(np.linspace(0, 5*np.pi, n))**2 \
      + np.sin(np.linspace(1, 6*np.pi, n))**2
scaling = (limit_high - limit_low) / (max(my_data) - min(my_data))
my_data = my_data * scaling
my_data = my_data + (limit_low - min(my_data))

(代码由用户Swier提供)

如果我正确理解了您的问题,那么您正在处理一个非平稳时间序列。这是时间序列分析中的一个常见问题,但有一些方法可以处理非平稳数据或使其平稳(如去趋势化)。这些操作并不琐碎,而且有各种方法,主要是从面向统计的语言(如R)复制而来


LSTM还可以处理非平稳数据。有关更多有用的讨论,请参阅。

请提供一个链接(没有图像/链接,只有文本)。我很抱歉。我对Python还是一个新手,在学习的过程中不断学习。我真的不知道如何为随机噪声信号编写一个简短的代码,也不可能只附加一个数据帧样本。但是,我设法从一个旧问题中找到了一个问题,并将其添加进去。statsmodels模块的问题是我必须指定顺序。当一些似乎是第二顺序,而另一些似乎是第一顺序时,这就成了问题。我想我可以根据这个创建两个不同的数据帧,然后尝试这个模块。但我仍然希望有一个解决方案能够直接处理数据帧,因为这将简化我的工作,因为我有20个不同的解决方案(来自独立实验)。