熊猫通过该类别的平均值填充空值(使用循环?)

Posted

技术标签:

【中文标题】熊猫通过该类别的平均值填充空值(使用循环?)【英文标题】:pandas fill null values by the mean of that category (use loop?) 【发布时间】:2022-01-23 23:31:20 【问题描述】:

我正在尝试根据当年观察到的值的平均值来填充数据集中缺失的数据,并且需要很长时间才能逐个写入。我无法使用 for 循环创建此结构。应该怎么编码?

df['TOTAL_REVENUE'] = df.TOTAL_REVENUE.fillna(df.groupby('YEAR')['TOTAL_REVENUE'].transform('mean'))  
df['FEDERAL_REVENUE'] = df.FEDERAL_REVENUE.fillna(df.groupby('YEAR')['FEDERAL_REVENUE'].transform('mean'))  
df['STATE_REVENUE'] = df.STATE_REVENUE.fillna(df.groupby('YEAR')['STATE_REVENUE'].transform('mean'))   
df['TOTAL_EXPENDITURE'] = df.TOTAL_EXPENDITURE.fillna(df.groupby('YEAR')['TOTAL_EXPENDITURE'].transform('mean'))  

我知道这是错误的,但我想把它作为一个例子来展示。

for column in df.columns:
    df[column] = df.column.fillna(df.groupby('YEAR')[column].transform('mean'))  
    #df['TOTAL_REVENUE'] = df.TOTAL_REVENUE.fillna(df.groupby('YEAR')['TOTAL_REVENUE'].transform('mean'))  

A screenshot as an example

【问题讨论】:

【参考方案1】:

你会这样做(使用df[column] 而不是df.column):

for column in df.columns:
    df[column] = df[column].fillna(df.groupby('YEAR')[column].transform('mean'))

【讨论】:

嘿,richardec,这段代码给出了这样的错误 DataError: No numeric types to aggregate。但是当我将所有列一一翻转时,实际上没有问题 您的旧重复代码是否正常工作? 是的,它的工作原理 您可能需要列出要处理的列并循环遍历该列表,而不是 df.columns。问题可能是df 中有一些列是这段代码不应该做的。 我错过了,你说得对,非常感谢,解决速度很快:)

以上是关于熊猫通过该类别的平均值填充空值(使用循环?)的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:在每组中按平均值填充缺失值

熊猫:在每组中按平均值填充缺失值

如何在熊猫数据框中捕获连字符分隔数字的平均值?

如何使用 while 循环填充矩阵(按块)?

熊猫在相对时间范围内通过另一个值获得平均值

如何在熊猫中将月度数据转换为季度