【问题标题】:Python Fill empty cells with average for row's groupPython用行组的平均值填充空单元格
【发布时间】:2021-04-11 17:46:51
【问题描述】:

我基本上有一个包含两列的 csv 文件:PLACE(字符串)和数量(int)。我的一些数量行是空的,我想用 PLACE 组的 AVERAGE 填充它们。

例如:

地点、数量

澳大利亚,4

澳大利亚,2

美国,3

澳大利亚,

您可以看到一个“澳大利亚”没有关联的数量。我希望“AUS”的那一行具有所有具有值的“AUS”行的平均值。我将如何在 python 中执行此操作?我在下面试过这个,但它没有做任何事情。也许是因为我用 NaN 填充了 NA,它没有填充?

import pandas as pd
import csv
# READ THE DATA FILES
csv_file = open('MY_CSV.csv')
df = pd.read_csv(csv_file)


# fill all NAs and replace with the average of that PLACE
AverageReplace = df.groupby('PLACE')['QUANTITY'].mean()
df['QUANTITY'].fillna(AverageReplace, inplace=True)
df.head()

【问题讨论】:

    标签: python pandas jupyter


    【解决方案1】:
    
    y=a.fillna(0).groupby('PLACE').agg('mean')['Quantity']
    
    a['Quantity'] = a[['PLACE','Quantity']].apply(lambda x: y[x['PLACE']] if np.isnan(x['Quantity']) else x['Quantity'],axis=1)
    
    

    试试这个。它适用于我的系统

    【讨论】:

    • 是的,谢谢。但这究竟是如何工作的呢?我只是没有得到 lambda (第二行)和最后一位你有“else x['quantity'],axis =1”
    • lambda 函数是内联函数。发生的情况是,它需要由两列组成的每一行并检查该行中的数量是否为空。如果它为空,它将用为该行中的位置计算的平均值替换空值。如果您打印所有内容,您可能会更好地理解
    【解决方案2】:

    下面是另一种方法。

    import numpy as np
    import pandas as pd
    
    data = {'Place':['Australia', 'Australia', 'USA', 'Australia'], 'Quantity':[4,2,3,np.nan] }
    
    df = pd.DataFrame(data)
    
    df['Quantity'] = df['Quantity'].fillna(df[df['Place']=='Australia']['Quantity'].mean())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2017-05-03
      • 1970-01-01
      • 2018-01-16
      • 2021-06-09
      • 2021-11-01
      • 2015-06-04
      相关资源
      最近更新 更多