【问题标题】:pandas fill null values by the mean of that categorypandas 按该类别的平均值填充空值
【发布时间】:2020-10-25 10:01:39
【问题描述】:

我有这个数据集。您可以看到 null Value 对应于 Product Wheat。我想用那个产品的类别来填充这个空的Value。所以对于小麦,这是A 的类别,意思是5+8/2=6.5

  Product     Value Category
0   Rice        5      A
1   Corn        8      A
2   Milk       17      B
3   Wheat      NaN     A
4   Ice cream   3      B

这是我尝试过的。

df[Value].fillna(df.groupby('Category')[Value].mean(),inplace=True)

但这不起作用。因为它返回每个类别的平均值。那么我该如何实现呢?感谢您的帮助。

【问题讨论】:

    标签: python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    试试:

    df['Value'] = df.groupby('Category')['Value'].transform(lambda x: x.fillna(x.mean()))
    

    【讨论】:

      【解决方案2】:

      试试这个,

      for index, row in df.iterrows():
        product = row['product']
        value = row['value']
        category = row['category']
        if np.isnan(value):
          category_mean = df.groupby('category')['value'].mean()[category]
          print(f'category_mean : {category_mean}')
          df.loc[index, 'value'] = category_mean
        else:
          print(product, value, category)
      

      https://github.com/biranchi2018/My_ML_Examples/blob/master/16.Stackoverflow_Pandas.ipynb

      【讨论】:

      • 感谢您的帮助。它有效,但似乎并不复杂。虽然学到了很多。
      【解决方案3】:

      您可以使用GroupBy + transform 以分组方式填充NaN 值。

      df['value'] = df['value'].fillna(df.groupby('Category')['value'].transform('mean'))
      df['value'] = df['value'].fillna(df['value'].mean())
      df
      

      【讨论】:

      • 为什么要对均值进行两次单独的计算?
      • 我猜他展示了两种平均修复空值的方法。 @sammywemmy
      【解决方案4】:
      data1 = data.groupby('Category')['Value'].mean().reset_index()
      data1.columns = ['Category','Mean']
      data = data.join(data1.set_index('Category'), on='Category')
      data['Value'] = data['Value'].fillna(data['Mean'])
      data=data.drop('Mean',axis=1)
      data
      

      output

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        • 2019-03-31
        相关资源
        最近更新 更多