如何在Julia中为DataFrame的过夜时间数据添加一天?
如何用Julia为过夜时间数据添加一天?
针对你提供的连续约一天的小时数据场景(过夜时段需加一天修正日期),可以通过以下步骤实现:
实现代码
using CSV, DataFrames, Dates # 读取原始数据 path = tempname() write(path, "t\n9\n12\n18\n0\n5\n") df = CSV.read(path, DataFrame, types=Dict(:t=>DateTime), dateformat="H") # 提取小时字段用于判断跨天节点 df.hour = hour.(df.t) # 标记跨天位置:当前小时小于前一个小时则为第二天起点 cross_day = [false; diff(df.hour) .< 0] # 生成累计天数偏移:跨天后的所有记录需对应加天数 day_offset = cumsum(cross_day) # 为时间字段添加天数偏移 df.t .+= Day.(day_offset) # 清理临时字段(可选操作) select!(df, :t)
运行结果
处理后的DataFrame输出如下:
5×1 DataFrame Row │ t │ DateTime ─────┼───────────────────── 1 │ 0001-01-01T09:00:00 2 │ 0001-01-01T12:00:00 3 │ 0001-01-01T18:00:00 4 │ 0001-01-02T00:00:00 5 │ 0001-01-02T05:00:00
逻辑说明
- 提取小时字段:通过
hour.(df.t)获取每个时间记录的小时数,作为跨天判断的依据。 - 标记跨天位置:利用
diff(df.hour)计算相邻小时的差值,当差值为负时(如0点比前一条的18点小),说明该记录属于第二天。 - 生成天数偏移:用
cumsum(cross_day)累计跨天次数,得到每条记录需要添加的天数(跨天后的记录偏移量为1,之前为0)。 - 应用偏移修正:将天数偏移转换为
Day类型,加到原时间字段上,完成日期修正。
该方法同样适用于包含多次跨天的长时段小时数据,cumsum会自动累计每次跨天的偏移量。
内容的提问来源于stack exchange,提问作者Daniel YC Lin
相关产品推荐
相关产品推荐

