У меня есть фрейм данных, где каждая строка фрейма данных содержит сигнал времени. Образцы сигнала времени хранятся в столбцах.
0 1 2 3 ... 996 997 998 999
a 0.0 0.713118 1.199746 1.319181 ... -1.069539 -1.319181 -1.199746 -0.713118
b 0.0 0.587785 0.951057 0.951057 ... -0.587785 -0.951057 -0.951057 -0.587785
c 0.0 0.125333 0.248690 0.368125 ... -0.481754 -0.368125 -0.248690 -0.125333
Я хочу фильтровать нижних частот каждую строку и использовать для этого scipy. Мой фактический код работает, но я хотел бы избежать повторения с l oop по фрейму данных:
import numpy as np
from scipy import signal
import pandas as pd
def lowPassFilter(df, fs=1000, fc=20):
data_fil = df.copy()
rows = df.shape[0]
# --- Setup Filter with sampling frequency fs and cutoff frequency fc
w = fc / (fs / 2)
b, a = signal.butter(5, w, 'low')
# --- Apply Filter to every row
for i in range(rows):
data_fil.iloc[i, :] = signal.filtfilt(b, a, data_fil.iloc[i, :])
return data_fil
Я пытался использовать функцию применения фрейма данных, но у меня это не сработало. Итак, мой вопрос:
Как вообще лучше всего выполнять преобразования, подобные приведенным выше, для каждой строки фрейма данных? Спасибо!