[英]Create a function iterating in Panda's Dataframe rows to replace null values
我有一个带有一些空值的 DataFrame,我想用其他 DataFrame 中的平均值替换它们。 我创建了一个函数,以后应该用 lambda 实现它,但我一直收到错误。
我有一个这样的数据框:
顾客类型 | 类别 | 满意 | 年龄 |
---|---|---|---|
非高级 | 电子产品 | 不满意 | 钠 |
非高级 | 美丽 | 使满意 | 钠 |
优质的 | 运动的 | 使满意 | 38.0 |
非高级 | 运动的 | 不满意 | 钠 |
我需要填写这些数据:
顾客类型 | 满意 | 年龄 |
---|---|---|
非高级 | 不满意 | 32.440740 |
非高级 | 使满意 | 28.896348 |
优质的 | 不满意 | 43.767723 |
优质的 | 使满意 | 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
条件检查,此代码不应返回错误
df["Age"] = df["Age"].apply(lambda x: fill_age(x) if np.isnan(x) else x)
我们应该try avoid use apply
,所以我们可以使用:
df['Age'] = df['Age'].fillna(
df.groupby(['CustomerType', 'Satisfaction'])['Age'].transform('first')
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.