gpt4 book ai didi

python - 无法用相应列中最后三行的平均值替换数据帧最后一行中的零,同时保留非零值

转载 作者:行者123 更新时间:2023-12-02 02:06:15 32 4
gpt4 key购买 nike

我有一个如下所示的数据集:

import pandas as pd, numpy as np
df = pd.DataFrame([[1,0,3,0], [5,6,7,8], [9,10,11,12], [11, 14,15,16], [0,0,19,0]], columns=['a','b','c','d'])

所以我想做的是:

  1. 最后一行中,只要值为 0,则替换为同一列的前三行的平均值
  2. 如果该值不为 0,则保持原样
  3. 此外,其他地方的所有其他 0 都应仅保留 0。

所以最终结果应该是这样的:

  a b   c   d
1 0 3 0
5 6 7 8
9 10 11 12
13 14 15 16
9 10 19 12

这里,所有三个 0 都被替换为前三个值的平均值。 19 保持原样。

我想做的是:

if (df.iloc[-1].any()==0):
df.iloc[-1] = df[-4:-1].mean()
else:
pass

这不会更改值,也不会返回任何错误。我在这里做错了什么?

最佳答案

如果您只需将 0 替换为 NaN,然后使用带有滚动平均值的 fillna 和移位,就会容易得多:

>>> df.iloc[-1]=df.iloc[-1].replace(0, np.nan)
>>> df=df.fillna(df.rolling(3, min_periods=1).mean().shift())

输出:

      a     b   c     d
0 1.0 0.0 3 0.0
1 5.0 6.0 7 8.0
2 9.0 10.0 11 12.0
3 13.0 14.0 15 16.0
4 9.0 10.0 19 12.0

关于python - 无法用相应列中最后三行的平均值替换数据帧最后一行中的零,同时保留非零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68419936/

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