gpt4 book ai didi

python - 如果它们之间的差异小于 pandas 中的固定值,则将行值替换为先前的值

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:01 24 4
gpt4 key购买 nike

我有一个类似的数据框

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

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

所以我想要这样

Index  Value
0 5
1 Nan
2 6
3 16
4 23
5 32
6 32
7 32
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)

它没有提供所需的输出,我哪里出错了?

编辑:

您好,我的要求有一个小修改。如果前一个值为空,我希望将它与之前的非空值进行比较并计算差值。所以在这种情况下,我希望它是

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

Index-2 的值应该是 5 而不是 6

最佳答案

一种方法是使用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

关于python - 如果它们之间的差异小于 pandas 中的固定值,则将行值替换为先前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55774490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com