如何简化IF语句

时间:2019-01-28 17:55:08

标签: python python-3.x pandas

所以我在python中有一个IF语句,该语句本质上是根据其他两列将数据集中的空值更改为平均值。

procadmin

所以在这里,我尝试使用某些旅客舱位中男性/女性的平均年龄来填写nans。我觉得会有一种更好的编写方法,特别是如果我要遇到更大的数据集时。 供参考,% df是包含所有数据的主df。由于某些原因,我无法使此代码与使用def impute_age(cols): Age = cols[0] Pclass = cols[1] Sex = cols[2] if pd.isnull(Age): if Pclass == 1 and Sex == 0: return train.loc[(train["Pclass"] == 1) & (train["Sex_male"] == 0)]["Age"].mean() if Pclass == 2 and Sex == 0: return train.loc[(train["Pclass"] == 2) & (train["Sex_male"] == 0)]["Age"].mean() if Pclass == 3 and Sex == 0: return train.loc[(train["Pclass"] == 3) & (train["Sex_male"] == 0)]["Age"].mean() if Pclass == 1 and Sex == 1: return train.loc[(train["Pclass"] == 1) & (train["Sex_male"] == 1)]["Age"].mean() if Pclass == 2 and Sex == 1: return train.loc[(train["Pclass"] == 2) & (train["Sex_male"] == 1)]["Age"].mean() if Pclass == 3 and Sex == 1: return train.loc[(train["Pclass"] == 3) & (train["Sex_male"] == 1)]["Age"].mean() else: return Age 参数传递的一部分火车配合使用。

本质上,这里的问题是:如果我的数据集大得多,我怎么能以一种更简单的方式编写它?有没有办法写这个IF语句?

2 个答案:

答案 0 :(得分:9)

在我看来,您需要做的就是参数化内部if

if pd.isnull(Age):
    return train.loc[(train["Pclass"] == Pclass) 
                   & (train["Sex_male"] == Sex)]["Age"].mean() 

答案 1 :(得分:0)

PCLASS_VALUES = [
[],
]

SEX_VALUES = [
[],
]

return train.loc[(train["Pclass"] == PCLASS_VALUES[Pclass][Sex]) & (train["Sex_male"] == SEX_VALUES[Pclass][Sex])]["Age"].mean()