我使用的是Pandas DataFrame,因为我必须替换ORDER_VALUES列中的NAN值,方法是对上述3行应用Mean,其中NaN值按Groupby ID列显示

Input Dataframe   
        Id     order_values
       1002       45
       1002       36
       1002       18
       1002       NaN    
       1002       NaN   
       1002       72
       1003       68
       1003       54
       1003       45
       1003       NaN
       1003       NaN
       1004       14
       1004       50
       1004       27
       1004       NaN


Output Dataframe   
        Id     order_values
       1002       45
       1002       36
       1002       18
       1002       33    [Calculation 18+36+45=99/3= 33 ]
       1002       29   [Calculation 33+18+36=99/3= 29 ]
       1002       72
       1003       68
       1003       54
       1003       45
       1003       55.6  [Calculation 45+54+68=167/3= 55.6  ]
       1003       51.53  [Calculation 45+54+68=154.6/3= 51.53 ]
       1004       14
       1004       50
       1004       27
       1004       30.33   [Calculation 27+50+14=91/3= 30.33 ]

推荐答案

您可以这样做:

s = df['order_values'].copy()
for i in range(3, len(s)):
    s.iloc[i] = s.iloc[i-3:i].mean() if pd.isna(s.iloc[i]) else s.iloc[i]

df['order_values'] = s

打印(Df):

      Id  order_values
0   1002     45.000000
1   1002     36.000000
2   1002     18.000000
3   1002     33.000000
4   1002     29.000000
5   1002     72.000000
6   1003     68.000000
7   1003     54.000000
8   1003     45.000000
9   1003     55.666667
10  1003     51.555556
11  1004     14.000000
12  1004     50.000000
13  1004     27.000000
14  1004     30.333333

如果您想按Id分组,那么您可以在函数中编写以上几行,并使用groupbytransform,如下所示:

def fill_na_in_order_values(s):
    for i in range(3, len(s)):
        s.iloc[i] = s.iloc[i-3:i].mean() if pd.isna(s.iloc[i]) else s.iloc[i]
    return s

df['order_values'] = df.groupby('Id')['order_values'].transform(fill_na_in_order_values)

Python-3.x相关问答推荐

如何使用TensorFlow Keras子类化来构建和训练模型

给定panda代码的分组和百分比分布pyspark等价

在REPLACE INTO中引用变量会抛出sqlite3.OperationalError

PyTest:尽管明确运行了测试,但是被标记为没有运行测试

如何在类中的函数(以 self 作为第一个参数)中使用递归

如果集合大于 len(x),则 pandas 在重复的行中拆分集合列

使用gekko python的混合整数非线性规划

python中两个连续的yield语句如何工作?

具有函数值的 Python 3 枚举

Python 3.5 中编码 utf-8 和 utf8 的区别

smtplib 在 Python 3.1 中发送带有 unicode 字符的邮件的问题

Python 3 list(dictionary.keys()) 引发错误.我究竟做错了什么?

运行 PyCharm 测试时如何解决django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库?

Seaborn 热图 colored颜色 条标签作为百分比

如何注释一个以另一个函数作为参数的函数?

是否有与 Laravel 4 等效的 python?

在 ubuntu 20.04 中安装 libpq-dev 时出现问题

如何使用 python 库连接到 poloniex.com websocket api

什么是ANSI_X3.4-1968编码?

Django 教程 unicode 不起作用