如何为熊猫数据框的每一列应用具有不同时间常数的一阶过滤器?

Posted

技术标签:

【中文标题】如何为熊猫数据框的每一列应用具有不同时间常数的一阶过滤器?【英文标题】:How to apply a first order filter with a different time constant for each column of a pandas dataframe? 【发布时间】:2021-11-09 03:24:01 【问题描述】:

大家!我有一个熊猫数据框,其中每一列代表一个噪声信号,我想在每一列中应用一阶滤波器(增益 = 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

有什么想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以将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 部分)。

如果您还想对每一列应用单独的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)

只需确保gainstime_constants 是可迭代的(例如列表或numpy 数组),您可以在其中通过列的索引对其进行索引,以提取该列的特定增益和时间常数.

【讨论】:

"gain" 和 "time_constant" 会各自成为一个元组吗?我的意思是,我需要为每列提供不同的增益和时间常数,所以这就是假设的原因。对吗? 我误解了你的问题,并没有意识到你想要每列单独的增益和 time_constant。我已经更新了我的答案。如果这就是你要找的,请接受答案! 我想“应用”部分的答案还可以,但我仍然不确定如何进行“一阶过滤”。无论如何,我想我应该把问题一分为二。谢谢

以上是关于如何为熊猫数据框的每一列应用具有不同时间常数的一阶过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在循环中将不同大小的列表附加到空熊猫数据框的每一列?

将函数应用于熊猫中数据框的每一列

如何为来自同一个熊猫数据框的所有不同列制作单独的 Seaborn kde 图?

在没有数据重复的情况下爆炸数据框的每一列

如何为 Handsontable 中的每一列定义自定义验证器

如何计算熊猫数据框中每一列的唯一性?