我是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'] >= 60
0
除此以外这个(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)
归档时间: |
|
查看次数: |
106 次 |
最近记录: |