【问题标题】: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

【问题讨论】:

    标签: pandas dataframe pandas-groupby


    【解决方案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 中有一些列是这段代码不应该做的。
    • 我错过了,你说得对,非常感谢,解决速度很快:)
    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多