墨色风雨
不要使用apply(axis=1). 相反,您应该使用.loc. 这是顶壳的简单映射。m = train.Age.isnull()d = {1: 38, 2: 30, 3: 25}train.loc[m, 'Age'] = train.loc[m, 'Pclass'].map(d)对于底部情况,因为else我们可以使用np.select. 它的工作方式是我们创建一个条件列表,它遵循 if、elif else 逻辑的顺序。然后我们提供一个选择列表,当我们遇到第一个时可以从中选择True。由于您有嵌套逻辑,我们需要首先取消嵌套它,以便它在逻辑上读作if age is null and pclass == 1elif age is null and pclass == 2elif age is null else样本数据import pandas as pdimport numpy as npdf = pd.DataFrame({'Age': [50, 60, 70, np.NaN, np.NaN, np.NaN, np.NaN], 'Pclass': [1, 1, 1, 1, 2, np.NaN, 1]})# Age Pclass#0 50.0 1.0#1 60.0 1.0#2 70.0 1.0#3 NaN 1.0#4 NaN 2.0#5 NaN NaN#6 NaN 1.0m = df.Age.isnull()conds = [m & df.Pclass.eq(1), m & df.Pclass.eq(2), m]choices = [37, 29, 24]df['Age'] = np.select(conds, choices, default=df.Age) # | # Takes care of else, i.e. Age not nullprint(df)# Age Pclass#0 50.0 1.0#1 60.0 1.0#2 70.0 1.0#3 37.0 1.0#4 29.0 2.0#5 24.0 NaN#6 37.0 1.0