如果行值与之前的值之差小于固定值(以熊猫为单位),则将其替换为前一个值

时间:2019-04-20 14:35:15

标签: python pandas dataframe

我有一个类似的数据框

get

如果与上一行的差小于2,则当前行的值必须仅等于上一行。

所以我想要它

Index  Value
0        5
1        Nan
2        6
3        16
4        23
5        32
6        33
7        34

Index  Value
0        5
1        Nan
2        6
3        16
4        23
5        32
6        32
7        32

它没有提供期望的输出,我在哪里出错?

编辑:

嗨,我的要求有一点修改。如果先前的值为null,我希望将其与先前的非null值进行比较并计算差异。所以在这种情况下,我希望它是

I have tried : 

test = np.where(df.Value.notnull() & df.Value.shift(-1).notnull() & ((df.Value - df.Value.shift(-1)) < 2),df.Value.shift(-1),df.Value)

索引2的值应为5而不是6

1 个答案:

答案 0 :(得分:3)

使用diffcumsum的一种方式创建组密钥,然后使用transform

s=df.Value.diff()
df.groupby((s.isnull()|s.gt(2)).cumsum()).Value.transform('first')
0     5.0
1     NaN
2     6.0
3    16.0
4    23.0
5    32.0
6    32.0
7    32.0
Name: Value, dtype: float64

更新呵呵

s=df.Value.diff()
print(df.groupby((s.gt(2)).cumsum()).Value.transform('first').mask(df.Value.isnull()))
0     5.0
1     NaN
2     5.0
3    16.0
4    23.0
5    32.0
6    32.0
7    32.0
Name: Value, dtype: float64