【问题标题】:Custom Selection of dataframe and replacing values of certain rows with mean自定义选择数据框并用平均值替换某些行的值
【发布时间】:2020-10-01 10:11:30
【问题描述】:

所以基本上我有一个有点像这样的数据集

我只想选择“哈佛”行并获取它们的均值,并将其替换为 GPA 中仅针对“哈佛”的缺失值和斯坦福大学的不同平均值

我试过data['GPA'].fillna(data['GPA'].mean()),但它只会用整列的平均值填充它。

【问题讨论】:

标签: python dataframe jupyter-notebook


【解决方案1】:

给定一个包含问题中概述的数据的文件 (yourdata.csv),您可以使用以下示例将 GPA 列中的所有空值替换为每个对应 University 的平均值 GPA行。

此解决方案利用df.apply (docs) 将相同的条件逻辑应用于df 中的每一行。

import pandas as pd
import numpy as np

df = pd.read_csv('yourdata.csv')

df['GPA'].fillna(np.nan, inplace=True) # Ensuring null values in GPA col are np.nan

df['GPA'] = df.apply(
    lambda row: df[df['University'] == row['University']]['GPA'].mean() 
    if np.isnan(row['GPA']) else row['GPA'], axis=1
)

如果您想在 University == 'Harvard' 的行上执行此逻辑(即不使用各自的平均值填充斯坦福、牛津等行中的空 GPA 值),您可以简单地将其添加为lambda 中的进一步条件应用于每一行,以确保只有 University == 'Harvard' 的行受到影响。

# Same imports, original df and fillna as above snippet
df['GPA'] = df.apply(
    lambda row: df[df['University'] == row['University']]['GPA'].mean() 
    if np.isnan(row['GPA']) and row['University'] == 'Harvard' 
    else row['gpa'], axis=1
)

【讨论】:

    【解决方案2】:

    看看这是否有效

    df['GPA']=df[df['University']=='Havard'].fillna(df.mean())
    

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 2021-01-19
      • 2018-03-19
      • 1970-01-01
      • 2020-07-12
      • 2019-09-17
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      相关资源
      最近更新 更多