我有一個包含傳感器資料的資料框。傳感器資料有波動。我想盡量減少這些波動,使其適合進一步分析。
我擁有的資料樣本如下所示:
0
------
0 5
1 5
2 0
3 5
4 5
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 0
13 1
14 1
15 0
16 3
17 3
18 3
19 0
20 0
21 0
22 0
非零值之間的零值是波動的結果。我希望將這些介于非零值之間的零值替換為相鄰的非零值。這不應影響傳感器資料列中存在的尾隨和前導零值。
我想要的輸出應該如下所示:
0
------
0 5
1 5
2 5 <---
3 5
4 5
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 1 <---
13 1
14 1
15 1 <---
16 3
17 3
18 3
19 0
20 0
21 0
22 0
箭頭表示我需要更換。最好的方法是什么?
uj5u.com熱心網友回復:
替換0為缺失值,然后使用引數前向填充缺失值limit,但僅適用于行,如果沒有前向和后向填充值的缺失值:
s = df[0].replace(0, np.nan)
ff = s.ffill(limit=1)
bf = s.bfill(limit=1)
df['new'] = np.where(ff.notna() & bf.notna(), ff, 0).astype(int)
print (df)
0 new
0 5 5
1 5 5
2 0 5
3 5 5
4 5 5
5 0 0
6 0 0
7 0 0
8 0 0
9 0 0
10 1 1
11 1 1
12 0 1
13 1 1
14 1 1
15 0 1
16 3 3
17 3 3
18 3 3
19 0 0
20 0 0
21 0 0
22 0 0
uj5u.com熱心網友回復:
第一種方法
腳步:
- 將列轉換為串列。
- 遍歷 list ,檢查每個索引是否值為 0,如果是,則使當前索引值與上一個相同,否則迭代下一個。
- 將新串列作為資料框中的列。
第二種方法
如果當前值為 0,則在資料框中使用 ffill() 方法并復制先前的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/421240.html
標籤:
