[问题] 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