我在數據幀中有以下signalId
(df
)。我想在更換不必要的signalId的用列表中的前一個值替換不需要的值
在下面的例子來平滑該信號, 一)6編號03
應由01
二)第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
我在數據幀中有以下signalId
(df
)。我想在更換不必要的signalId的用列表中的前一個值替換不需要的值
在下面的例子來平滑該信號, 一)6編號03
應由01
二)第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
此代碼的伎倆......假設的邏輯,以確定3,4,5是無效的是,他們是>大於2
你可能需要做一些調整,你的邏輯找到不合適的價值,但下面的其他程序應該起作用。基本上找到無效值,設置nan。然後在最後填寫()。
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)
是否有邏輯?兩行之間的差異不應超過某個閾值等? – Kartik
沒有這樣的邏輯,Kartik。 01之後我可以有信號51 - 但是,我必須清理/更換意外的值。它應該是1,2等系列。 – Prasad