首页 > 解决方案 > 如何在 julia 的数据帧上为每个 DateTime x 轴附加零值

问题描述

我想绘制一个数据,但它的 x 轴是时间,对于每半小时的缺失值,我希望填充零。

using CSV, DataFrames, Dates
s="ts, v
2020-01-01T01:00:00, 3
2020-01-01T04:00:00, 6
2020-01-01T05:00:00, 1"
d=CSV.read(IOBuffer(s))

我希望像 d2 一样扩展d

s2="ts, v
2020-01-01T01:00:00, 3
2020-01-01T01:30:00, 0
2020-01-01T02:00:00, 0
2020-01-01T02:30:00, 0
2020-01-01T03:00:00, 0
2020-01-01T03:30:00, 0
2020-01-01T04:00:00, 6
2020-01-01T04:30:00, 0
2020-01-01T05:00:00, 1"
d2=CSV.read(IOBuffer(s2))

标签: julia

解决方案


我可能会做以下事情:

# Create half-hourly data frame with zeros from first to last observation
julia> df = DataFrame(ts = minimum(d.ts):Minute(30):maximum(d.ts), v_filled = 0);

# Join the existing observations onto this dataframe
julia> df = join(df, d, on = :ts, kind = :left);

# Replace zeros with observations where available
julia> df[.!ismissing.(df.v), :v_filled]  = df[.!ismissing.(df.v), :v];
julia> df

9×3 DataFrame
│ Row │ ts                  │ v_filled │ v       │
│     │ DateTime            │ Int64    │ Int64⍰  │
├─────┼─────────────────────┼──────────┼─────────┤
│ 1   │ 2020-01-01T01:00:00 │ 3        │ 3       │
│ 2   │ 2020-01-01T01:30:00 │ 0        │ missing │
│ 3   │ 2020-01-01T02:00:00 │ 0        │ missing │
│ 4   │ 2020-01-01T02:30:00 │ 0        │ missing │
│ 5   │ 2020-01-01T03:00:00 │ 0        │ missing │
│ 6   │ 2020-01-01T03:30:00 │ 0        │ missing │
│ 7   │ 2020-01-01T04:00:00 │ 6        │ 6       │
│ 8   │ 2020-01-01T04:30:00 │ 0        │ missing │
│ 9   │ 2020-01-01T05:00:00 │ 1        │ 1       │

推荐阅读