我在数据框(signalId
)中有以下df
。我试图在替换不需要的signalId的时候平滑这个信号
在以下示例中,
a)第6个ID 03
应替换为01
b)第12和第13(分别为04
和05
)应替换为02
01
01
01
01
01
03
01
01
02
02
02
04
05
02
02
02
如果我知道确切的位置,我可以替换该值,但是如何循环执行此操作?
df.id.loc[6] = 01
答案 0 :(得分:0)
这段代码可以解决问题......假设确定3,4,5无效的逻辑是它们是>比2.
您可能需要对逻辑进行一些调整以找到不合适的值,但下面的其余步骤应该有效。基本上找到无效值,设置为nan。然后ffill()结束。
import pandas as pd
import numpy as np
data = pd.Series([51,51,1,51,51,1,1,2,1,1,1,48,48,2,48,
1,1,1,1,3,1,1,2,2,2,4,5,2,2,2])
# answer is 2, 7, 13, 19, 25, 26
# size 1 gaps.
# get the next value,
data_pr = data.shift(-1)
data_nx = data.shift(1)
# % exclude the first 2 items from the filder.
data_nx[:1]= data[:1]
data_pr[-1:] = data[-1:]
#data_lag2[:2]= data[:2]
# % find the idx where data != data_lag1 && data == data_lag2
data[(data != data_pr) & (data != data_nx) & (data_pr == data_nx) ]=np.nan
# % get invalid values that are 2 in a row...
data_pr2 = data.shift(-2)
data_nx2 = data.shift(2)
data[(data != data_pr) & (data != data_nx) & (data_pr2 == data_nx2) ]=np.nan
# %
assert (data[data.isnull()].index.values == np.array([2,7,13,19,25,26])).all()
data.ffill(inplace=True)