所以我遇到了这个非常愚蠢的问题,我已经绊了好几个小时了。
我正在使用graphlab create在kaggle的Titanic ML练习上进行练习。

我的数据如下所示:
python - Graphlab:替换Sframe中的值并进行过滤-LMLPHP

现在,我想替换表中的一些值。例如,我想将年龄(年龄)设置为38(对于Pclass == 1),对于Pclass == 2为30,对于Pclass == 3,则为26

我尝试了很多方法来使自己迷失方向。

我现在所拥有的是:

df = gl.SFrame(data)
df[(df["Pclass"]==1)] #will print the rows of the table where Pclass=1
df["Age"][df["Pclass"]==1] #will display an array containg only the column "Age" for Pclass=1


现在,我试图正确使用SFrame.apply,但感到困惑。

我试过了

df["Age"][df["Pclass"]==1].apply(lambda x: 38)


这将返回具有正确值的数组,但我无法将其应用于SFrame。
例如,我尝试过:

df = df["Age"][df["Pclass"]==1].apply(lambda x: 38)


但是现在我的DataFrame变成了一个列表...(显然)

我也尝试过:

df["Age"] = df["Age"][df["Pclass"]==1].apply(lambda x: 38)


但是我收到以下错误:“ RuntimeError:运行时异常。列“ __PassengerId-Survived-Pclass-Sex-Age-Fare”的大小与当前列的大小不同!”

我确定解决方案非常简单,但是我很困惑,无法自己找到它。

最终我想要这样的东西
df [“ Age”] = something.apply(lambda x:如果Pclass == 1则为38,否则如果Pclass == 2则为30,否则如果Pclass == 3则为26)

谢谢。

最佳答案

您可以使用以下替代代码:

只需在原始Sframe中创建一个新列'Pclass_',即可:

df['Pclass_'] = [1 if item == 38 else 2 if item == 30 else 3 if item == 26 else 4 for item in df['Age']]


您可以在列表中使用任何类型的(if-else-if)条件。

10-07 15:07