咨询:如何在Julia的DataFrame中计算行间时间差
在Julia中计算DataFrame行间时间差
你可以用两种方式实现类似R中mutate(diff=date-lag(date))的功能,以下是具体方法:
方法1:使用DataFrames的transform!函数
直接利用lag函数对日期列做滞后操作,再通过广播逐元素计算时间差:
# 计算行间时间差并添加为新列 transform!(csv, :date => (x -> x .- lag(x)) => :diff)
方法2:使用DataFramesMeta的@transform!宏(更贴近R的语法风格)
借助@transform!宏可以写出更简洁的代码,和你熟悉的R代码逻辑一致:
@transform!(csv, :diff = :date .- lag(:date))
关键说明:
- Julia中向量间的逐元素运算需要用广播操作符(
.),所以这里用.-而非-,确保每一行的日期与前一行日期逐一相减。 lag函数默认滞后1行,若需要滞后n行,可传入第二个参数,比如lag(:date, 2)表示滞后2行。- 计算后的
diff列第一个值为missing,因为第一行没有前一行数据,符合预期。
优化日期读取代码
你可以在读取CSV时直接指定日期格式,省去后续的格式转换步骤:
csv = CSV.read(IOBuffer(""" date,Amount 2023-12-27 18:40,4 2023-12-27 18:45,254 2023-12-27 18:50,24 2023-12-27 18:55,24 2023-12-27 19:00,5 """), DataFrame, dateformat="y-m-d H:M")
内容的提问来源于stack exchange,提问作者GeoffRussell
相关产品推荐
相关产品推荐

