[問題] pandas修正數據問題

作者: bigbigcc (大基基)   2018-09-02 04:42:35
最近在學python 現在想利用pandas進行數據清理異常值
想說讓兩個row之間的值不要差距太大如果差太多就跟前一個相同
df內為
a b
0 1 1
1 2 2
2 3 4
3 4 9
4 5 8
5 6 5
6 7 7
7 8 8
8 9 9
9 10 10
主要的程式碼如下
data = df['b']
def new(data):
for i in range(0, 10):
row = df['b'][i]
row1 = df['b'][i + 1]
if row1 - row > 2:
return row
else:
return row1
df['new'] = df['b'].map(new)
實際輸出結果為
a b new 本來認為會有的結果
0 1 1 2 1
1 2 2 2 2
2 3 4 2 4
3 4 9 2 4
4 5 8 2 4
5 6 5 2 5
6 7 7 2 7
7 8 8 2 8
8 9 9 2 9
9 10 10 2 10
想請問各位版友是我邏輯上還是函式使用上有哪邊誤解了嗎?
作者: fischcheng (布阿送)   2018-09-02 08:18:00
可以去看看apply, map, applymap的差別https://tinyurl.com/yahoj26t要是我的話我會新增一個column算出shift b跟原p的差別然後用條件去建立新的column*原b我記得applymap對那個series是改每個元素,它並不知道相鄰的其他元素的值。
作者: iphone2003 (307)   2018-09-03 14:42:00
只有我看不太懂想要的結果到底是怎麼出來的嗎...不過這種會跟上下列有關的 可是試試看rolling*可以

Links booklink

Contact Us: admin [ a t ] ucptt.com