首页 > 解决方案 > 如何为熊猫数据帧的每一列应用具有不同时间常数的一阶过滤器?

问题描述

每个人!我有一个 pandas 数据框,其中每一列代表一个噪声信号,我想在每一列中应用一阶滤波器(增益 = 1,时间常数 =“x”秒),但每列的时间常数不同。例如:

Column_A --> Time constant = 5 secs
Column_B --> Time constant = 15 secs
Column_C --> Time constant = 60 secs
Column_D --> Time constant = 200 secs

有任何想法吗?

谢谢!

标签: pythonpandasdataframefilteringsignal-processing

解决方案


您可以applyargs传递的作为元组使用,如下所示:

def your_filter_func(x, gain, time_constant):
    return some_filter(x, gain, time_constant)

df = df.apply(your_filter_func, args=(gain, time_constant), axis=0)

这适用your_filter_func于每一列(即 axis=0 部分)。

如果您还想对每一列应用单独的gaintime_constant,您可以通过使用列的索引并相应地调整来做到这一点:

def your_filter_func2(column, gains, time_constants):
    return some_filter(x, gains[column.index], time_constants[column.index])

df = df.apply(your_filter_func2, args=(gains, time_constants), axis=0)

并且只需确保gainsandtime_constants是一个可迭代的(例如列表或 numpy 数组),您可以在其中通过列的索引对其进行索引,以提取该列的特定增益和 time_constant。


推荐阅读