连续值的Python数据框检查增量

时间:2018-06-21 09:36:55

标签: python pandas series

我有一个这样的数据框

>>> df = pd.DataFrame([100, 150, 150, 103])
>>> df
     0
0  100
1  150
2  150
3  103
>>> 

我要检查下一个值是否小于上一个值的+ 10%或-10%,如果没有用下一个值替换下一个值

这是理想的结果

     0
0  100
1  100
2  100
3  103

我尝试使用“ where”,但无法正常工作

>>> df.where(abs(df / df.shift()-1) < 0.1, df.shift().fillna(method='bfill'), inplace=True)
>>> df
     0
0  100
1  100
2  150
3  150

我该如何解决?

1 个答案:

答案 0 :(得分:0)

这是使用pd.Series.iteritems的手动循环方法。

df = pd.DataFrame([100, 150, 150, 103])

res = np.zeros(len(df[0]))
res[0] = df[0].iloc[0]

for idx, val in df[0].iloc[1:].iteritems():
    if abs(val / res[idx-1] - 1) < 0.1:
        res[idx] = val
    else:
        res[idx] = res[idx-1]

df[1] = res.astype(int)

print(df)

     0    1
0  100  100
1  150  100
2  150  100
3  103  103