dataframe - Julia:如何通过使用“transform”或“@transform”添加两列来在 DataFrames.jl 中创建一个新列?
问题描述
using DataFrames
df = DataFrame(a=1:3, b=1:3)
如何创建一个新列c
,以便c = a+b
元素明智?
transform
通过阅读文档无法弄清楚。
我知道
df[!, :c] = df.a .+ df.b
有效,但我想transform
在这样的链中使用
@chain df begin
@transform(c = :a .+ :b)
@where(...)
groupby(...)
end
上述语法不适用于 DataFramesMeta.jl
解决方案
这是使用 DataFrames.jl 的答案。
创建一个新的数据框:
julia> transform(df, [:a,:b] => (+) => :c)
3×3 DataFrame
Row │ a b c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 1 1 2
2 │ 2 2 4
3 │ 3 3 6
对于就地操作:
julia> transform!(df, [:a,:b] => (+) => :c)
3×3 DataFrame
Row │ a b c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 1 1 2
2 │ 2 2 4
3 │ 3 3 6
或者
julia> insertcols!(df, :c => df.a + df.b)
3×3 DataFrame
Row │ a b c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 1 1 2
2 │ 2 2 4
3 │ 3 3 6
transform!
和之间的区别在于,如果数据框中存在列,则会出错,而insertcols!
会insertcols!
覆盖它。:c
transform!
推荐阅读
- java - 收到 javax.crypto.IllegalBlockSizeException 错误:使用填充密码解密时输入长度必须是 8 的倍数
- pdf - 在 WebView 中渲染 PDF 和 DOC 文件 - 两者都可以作为 URL 或文件 - Android
- visual-studio-2017 - VS Professional 2017 - 15.9.11 - 与安装相关的问题
- android - 如何在 android.bp 中编写条件 ifeq ($(filter-out tt_%,$(TARGET_PRODUCT)),)
- javascript - 使用构造函数比较对象内部的值
- symfony - 在教义中使用间隔时出错
- google-apps-script - Google Apps Script script.run -- 得到意外的 401,即使在发送 Oauth 令牌时也是如此
- java - Microsoft excel 日期格式的日本时代“令和”支持
- java - 如何检查字符串的哪一部分等于文本?
- android - 如何禁用显示在 android 谷歌地图上的共享按钮