创建一个在 Panda 的 Dataframe 行中迭代以替换空值的函数

Create a function iterating in Panda's Dataframe rows to replace null values

这几天我一直在为这段代码苦苦挣扎,我想我应该在这里试一试。

我有一个带有一些空值的 DataFrame,我想用我在其他 DataFrame 中的平均值替换这些空值。我创建了一个函数,稍后应该使用 lambda 来实现它,但我一直收到错误。


我有一个像这样的数据框:
CustomerType Category Satisfaction Age
Not Premium Electronics Not Satisfied NaN
Not Premium Beauty Satisfied NaN
Premium Sports Satisfied 38.0
Not Premium Sports Not Satisfied NaN

我需要填写这些数据:

CustomerType Satisfaction Age
Not Premium Not Satisfied 32.440740
Not Premium Satisfied 28.896348
Premium Not Satisfied 43.767723
Premium Satisfied 44.075901

所以我创建了一个函数:

def fill_age(x):
if x.isnull()== True:
    return[(grp.CustomerType==x.CustomerType) | (grp.Satisfaction==x.Satisfaction)]['Age'].values[0]

我想使用 lambda 函数 应用于我的数据框以遍历所有行:

df['Age'] = [df.apply(lambda x: fill_age(x) if np.isnan(x['Age']) else 
                                            x['Age'], axis=1) for x in df]

但我不断收到 此错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().


你们中的任何人都可以帮助我吗?非常感谢!!

假设您在 DataFrame 中错误地调用了 apply 并且 fill_age()df["Age"] 值上正确工作,您需要替换此语句,只是为了评估 x 并分配一个确定的值(当前 Age 或被外部数据替换)然后通过 else-if 条件检查,此代码不应 return错误

df["Age"] = df["Age"].apply(lambda x: fill_age(x) if np.isnan(x) else x)

我们应该,所以我们可以改用:

df['Age'] = df['Age'].fillna(
    df.groupby(['CustomerType', 'Satisfaction'])['Age'].transform('first')
)