Python 如果数据帧中的元素大于或小于以下元素的15%,请将其替换为0

Python 如果数据帧中的元素大于或小于以下元素的15%,请将其替换为0,python,pandas,Python,Pandas,我有一个以日期为索引的数据框。如果某个元素与前一个日期的元素有显著差异(15%),我想将其归零。例如: df = A B 1.2 2.5 1 2 我希望新的df如下所示: df = A B 0 0 1 2 df = df.replace(df.where(df.abs(df.divide(df.shift(-1))>.15)), 0) 我现在的代码如下: df = A

我有一个以日期为索引的数据框。如果某个元素与前一个日期的元素有显著差异(15%),我想将其归零。例如:

df =  A      B
     1.2    2.5
      1      2
我希望新的
df
如下所示:

df =  A      B
      0      0
      1      2
df = df.replace(df.where(df.abs(df.divide(df.shift(-1))>.15)), 0)
我现在的代码如下:

df =  A      B
      0      0
      1      2
df = df.replace(df.where(df.abs(df.divide(df.shift(-1))>.15)), 0)
我得到以下错误:

abs() takes 1 positional argument but 2 were given
这项工作:

df = df.where((df.divide(df.shift(+1), df).abs() > 0.15), 0)
print(df)
输出:

   A  B
0  0  0
1  1  2

请显示您的努力,简单地发布您想要的内容而不显示您尝试的内容是不好的。df.replace(df.where((df.abs(df.divide(df.shift(-1)))>.15)),0)将此编辑到您的问题中并显示失败的原因