python - 如何为熊猫数据帧的每一列应用具有不同时间常数的一阶过滤器?
问题描述
每个人!我有一个 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
有任何想法吗?
谢谢!
解决方案
您可以apply
将args
传递的作为元组使用,如下所示:
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 部分)。
如果您还想对每一列应用单独的gain
和time_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)
并且只需确保gains
andtime_constants
是一个可迭代的(例如列表或 numpy 数组),您可以在其中通过列的索引对其进行索引,以提取该列的特定增益和 time_constant。