我是Python的新手,我想知道以下代码行在做什么以及如何用R编写:
df['sticky'] = df[['humidity', 'workingday']].apply(lambda x: (0, 1)[x['workingday'] == 1 and x['humidity'] >= 60], axis = 1)
Run Code Online (Sandbox Code Playgroud)
例如,是什么意思lambda x: (0, 1)?
PS
df是一个pandas数据帧
让我们从开始吧lambda.完整的表达方式是:
lambda x: (0, 1)[x['workingday'] == 1 and x['humidity'] >= 60]
Run Code Online (Sandbox Code Playgroud)
它是一个匿名函数,它接受一个参数x并返回:
1 如果 x['workingday'] == 1 and x['humidity'] >= 600 除此以外这个(0, 1)[...]技巧用于返回0或1代替Python booleans False和True.它利用了这个事实,False并且True将被强制转换为数字0并且1当用于代替数值时,例如作为数组(或元组)索引.例如,如果表达式求值为True,1则访问元组的单元格,其中包含1.
此功能映射到(熊猫?)数据帧(实际上,仅在过滤列的每一行'humidity'和'workingday'),并将结果保存在'sticky'列.这就是说,你可以使用匿名翻译中的R相同的表达式function和apply:
df$sticky <- apply(df[, c("workingday", "humidity")], 1, function(x) {
x["workingday"] == 1 & x["humidity"] >= 60;
});
Run Code Online (Sandbox Code Playgroud)
(过滤可能没有必要,但我的R技能非常生疏).
然而,正如kdopen所写的那样,有一种更为惯用的方式来实现同样的目的:
df$sticky <- df$workingday == 1 & df$humidity >= 60
Run Code Online (Sandbox Code Playgroud)