我想基于 a 定义一个新列,该列之后未链接到原始列。
using DataFrames
x = DataFrame(a=1:3)
x.b = x.a
x.b[1] += 1
Run Code Online (Sandbox Code Playgroud)
有几种方法可以做到,主要是:
x[:, :b] = x.a
Run Code Online (Sandbox Code Playgroud)
或者
x.b = x[:, :a]
Run Code Online (Sandbox Code Playgroud)
你也可以写:
x[!, :b] = x[:, :a]
Run Code Online (Sandbox Code Playgroud)
(如果:b是变量,这可能很有用)
最后你也可以只写:
df.b = copy(df.a)
Run Code Online (Sandbox Code Playgroud)
或者
df.b = df.a[:]
Run Code Online (Sandbox Code Playgroud)
DataFrames.jl 的所有索引规则都可以在https://juliadata.github.io/DataFrames.jl/stable/lib/indexing/找到。
简而言之(稍微简化一点,但这些规则足以在实践中了解):
df.col 非复制获取和设置列df[!, :col]df.col与不同之处相同,您可以轻松地使用变量而不是文字进行索引,它适用于广播,而df.col如果:col数据帧中不存在则不适用于广播df[:, :col]用于获取列的副本并且是用于设置列的就地操作,除非:col不存在df在这种情况下它在设置时重新分配它