我有一个类似的数据框
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
答案 0 :(得分:3)
使用diff
和cumsum
的一种方式创建组密钥,然后使用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