2016-11-17 72 views
0

我在數據幀中有以下signalIddf)。我想在更換不必要的signalId的用列表中的前一個值替換不需要的值

在下面的例子來平滑該信號, 一)6編號03應由01 二)第12和13(0405分別替換)應該由02

被替換
01 
01 
01 
01 
01 
03 
01 
01 
02 
02 
02 
04 
05 
02 
02 
02 

我可以替換值,如果我知道確切的位置,但如何循環來做到這一點?

df.id.loc[6] = 01 
+0

是否有邏輯?兩行之間的差異不應超過某個閾值等? – Kartik

+0

沒有這樣的邏輯,Kartik。 01之後我可以有信號51 - 但是,我必須清理/更換意外的值。它應該是1,2等系列。 – Prasad

回答

0

此代碼的伎倆......假設的邏輯,以確定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) 
+0

PAB,這將解決如果id在增加順序。我可能有'[51,51,1,51,51,1,1,2,1,1,1,48,48,2,48]' – Prasad

+0

你如何定義這個ID是「不正確的」?或需要刪除? 它是否在黑名單上或不在白名單中?它是否有差異?它是不是連續的發生? – PabTorre

+0

其非連續發生 - 與有效信號的偏差。 – Prasad