给定虹膜数据,我想添加与找到的所有数字列相对应的新列。我可以通过明确列出每个数字列来做到:
from datatable import fread, f, mean, update
iris_dt = fread("https://h2o-public-test-data.s3.amazonaws.com/smalldata/iris/iris.csv")
iris_dt[:, update(C0_dist_from_mean = dt.abs(f.C0 - mean(f.C0)),
C1_dist_from_mean = dt.abs(f.C1 - mean(f.C1)),
C2_dist_from_mean = dt.abs(f.C2 - mean(f.C2)),
C3_dist_from_mean = dt.abs(f.C3 - mean(f.C1)))]
但是这样我就硬编码了列名。使用 R 数据表可以轻松获得更强大的方法.SDcols
:
library(data.table)
iris = fread("https://h2o-public-test-data.s3.amazonaws.com/smalldata/iris/iris.csv")
cols = names(sapply(iris, class)[sapply(iris, class)=='numeric'])
iris[, paste0(cols,"_dist_from_mean") := lapply(.SD, function(x) {abs(x-mean(x))}),
.SDcols=cols]
今天有没有办法对 pydatatable 采取类似的方法?
我确实意识到如何获取 py-datatable 中的所有数字列,例如:
iris_dt[:, f[float]]
但这是.SDcols
在 R 中使用的最后一部分,它避开了我。