我尝试过与其他问题不同的方法,但似乎仍无法找到问题的正确答案.关键的一点是,如果这个人被算作西班牙裔,他们就不能算作别的了.即使他们在另一个种族栏目中有"1",他们仍被视为西班牙裔,而不是两个或更多种族.同样,如果所有ERI列的总和大于1,则它们被计为两个或更多种族,不能被视为独特的种族(接受西班牙裔).希望这是有道理的.任何帮助将不胜感激.
它几乎就像在每行中执行for循环一样,如果每条记录符合条件,它们将被添加到一个列表中并从原始列表中删除.
从下面的数据框中,我需要根据以下内容计算新列:
========================= CRITERIA ======================== =======
IF [ERI_Hispanic] = 1 THEN RETURN “Hispanic”
ELSE IF SUM([ERI_AmerInd_AKNatv] + [ERI_Asian] + [ERI_Black_Afr.Amer] + [ERI_HI_PacIsl] + [ERI_White]) > 1 THEN RETURN “Two or More”
ELSE IF [ERI_AmerInd_AKNatv] = 1 THEN RETURN “A/I AK Native”
ELSE IF [ERI_Asian] = 1 THEN RETURN “Asian”
ELSE IF [ERI_Black_Afr.Amer] = 1 THEN RETURN “Black/AA”
ELSE IF [ERI_HI_PacIsl] = 1 THEN RETURN “Haw/Pac Isl.”
ELSE IF [ERI_White] = 1 THEN RETURN “White”
Run Code Online (Sandbox Code Playgroud)
评论:如果西班牙裔美国人的ERI标志为真(1),那么员工被归类为"西班牙裔"
评论:如果超过1个非西班牙语ERI标志为真,则返回"两个或更多"
====================== DATAFRAME =========================== …
当使用具有以下数据帧的多个列时,我在使用Pandas应用函数时遇到一些问题
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
Run Code Online (Sandbox Code Playgroud)
以及以下功能
def my_test(a, b):
return a % b
Run Code Online (Sandbox Code Playgroud)
当我尝试应用此功能时:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Run Code Online (Sandbox Code Playgroud)
我不明白这个消息,我正确地定义了这个名字.
我非常感谢你对这个问题的任何帮助
更新
谢谢你的帮助.我确实用代码做了一些语法错误,索引应该放''.但是我使用更复杂的功能仍然存在同样的问题,例如:
def my_test(a):
cum_diff = 0
for ix in df.index():
cum_diff = cum_diff + (a - df['a'][ix])
return cum_diff
Run Code Online (Sandbox Code Playgroud)
谢谢
......关于执行时间和/或记忆.
如果不是这样,请使用代码段进行证明.请注意,矢量化的加速不计算在内.增速必须来自apply(tapply,sapply,...)本身.
因此,我们习惯于对每个R新用户说" apply没有矢量化,请查看Patrick Burns R Inferno Circle 4 ",其中说(我引用):
常见的反射是使用apply系列中的函数.这不是 矢量化,而是循环隐藏.apply函数在其定义中有一个for循环.lapply函数掩盖了循环,但执行时间往往大致等于显式for循环.
实际上,快速查看apply源代码会显示循环:
grep("for", capture.output(getAnywhere("apply")), value = TRUE)
## [1] " for (i in 1L:d2) {" " else for (i in 1L:d2) {"
Run Code Online (Sandbox Code Playgroud)
好到目前为止,但看看lapply或vapply实际上揭示了一个完全不同的图片:
lapply
## function (X, FUN, ...)
## {
## FUN <- match.fun(FUN)
## if (!is.vector(X) || is.object(X))
## X <- as.list(X)
## .Internal(lapply(X, FUN))
## }
## <bytecode: 0x000000000284b618>
## <environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)
所以显然没有R for环隐藏在那里,而是他们调用内部C编写的函数.
此外,让我们以 …
我有一个数据帧麻烦,不能真正解决这个问题我自己:
该数据帧具有任意的性质列和每一行代表一个数据集.
问题是:
如何摆脱所有行的值为NA的列?
假设我有一个by 2矩阵和一个函数,它将一个2向量作为其参数之一.我想将函数应用于矩阵的每一行并得到一个n向量.在R中如何做到这一点?
例如,我想在三个点上计算2D标准正态分布的密度:
bivariate.density(x = c(0, 0), mu = c(0, 0), sigma = c(1, 1), rho = 0){
exp(-1/(2*(1-rho^2))*(x[1]^2/sigma[1]^2+x[2]^2/sigma[2]^2-2*rho*x[1]*x[2]/(sigma[1]*sigma[2]))) * 1/(2*pi*sigma[1]*sigma[2]*sqrt(1-rho^2))
}
out <- rbind(c(1, 2), c(3, 4), c(5, 6))
Run Code Online (Sandbox Code Playgroud)
如何将功能应用到每一行out?
如何以指定的方式将除了点之外的其他参数的值传递给函数?
我想在python pandas中为一个系列应用带参数的函数:
x = my_series.apply(my_function, more_arguments_1)
y = my_series.apply(my_function, more_arguments_2)
...
Run Code Online (Sandbox Code Playgroud)
该文档描述了对apply方法的支持,但它不接受任何参数.是否有接受参数的不同方法?或者,我错过了一个简单的解决方法吗?
更新(2017年10月): 请注意,由于此问题最初被要求apply()已更新pandas 以处理位置和关键字参数,上面的文档链接现在反映了这一点并显示了如何包含任一类型的参数.
我看到在不同的插件和代码中,但我不明白该功能是什么...在jQuery api中没有引用!
我如何概括下面的函数来取N个参数?(使用电话或申请?)
是否有一种编程方式将参数应用于"新"?我不希望构造函数被视为普通函数.
/**
* This higher level function takes a constructor and arguments
* and returns a function, which when called will return the
* lazily constructed value.
*
* All the arguments, except the first are pased to the constructor.
*
* @param {Function} constructor
*/
function conthunktor(Constructor) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
console.log(args);
if (args.length === 0) {
return new Constructor();
}
if (args.length === 1) {
return new Constructor(args[0]);
}
if (args.length === …Run Code Online (Sandbox Code Playgroud) 文件说
vapply类似于sapply,但具有预先指定的返回值类型,因此使用起来更安全.
你能详细说明为什么它通常更安全,可能提供例子吗?
PS:我知道答案,我已经倾向于避免sapply.我只希望在这里有一个很好的答案,所以我可以指出我的同事.请不要"阅读手册"的答案.