如何在Julia DataFrame中对列进行多行偏移操作?
在Julia DataFrame中实现列的多行偏移
要实现多行偏移,只需调整函数传递的写法,确保转换逻辑被正确识别即可,以下是两种高效方案:
方案1:正确包裹匿名函数
将ShiftedArrays.lag的参数逻辑完整放在匿名函数中,再按列名 => 转换函数 => 新列名的结构传递给transform:
using DataFrames, ShiftedArrays df = DataFrame(A=[1,2,3,4], B=[9,8,7,6]) transform(df, "A" => (x -> ShiftedArrays.lag(x, 2)) => :A1)
执行后输出结果:
4×3 DataFrame Row │ A B A1 │ Int64 Int64 Int64? ─────┼─────────────────────── 1 │ 1 9 missing 2 │ 2 8 missing 3 │ 3 7 1 4 │ 4 6 2
方案2:用Partial简化写法
如果觉得匿名函数繁琐,可导入Functors包的Partial工具,固定lag的偏移参数,让代码更简洁:
using Functors transform(df, "A" => Partial(ShiftedArrays.lag, 2) => :A1)
该写法与方案1效果完全一致。
原写法无效的原因
- 第一种错误写法将
=> :A1放在了匿名函数内部,破坏了transform要求的列 => 函数 => 新列映射结构,导致程序无法识别新列名。 - 第二种写法把数值
2和列名放在同一数组里,transform会将其视为要读取的列名,但DataFrame中不存在名为2的列,因此报错。
内容的提问来源于stack exchange,提问作者Samto
相关产品推荐
相关产品推荐

