使用 datetime JULIA 根据持续时间创建行
Creating rows as per duration using datetime JULIA
我在使用日期时间编写代码时遇到问题。我创建了一个我正在处理的场景。有人可以帮我解决 JULIA 中的代码吗?
输入:
Name, Channel, Duration, Start_time
John, A, 2, 16:00:00
Joseph, B, 3, 15:05:00
输出:
Name, Channel, Duration, Start_time
John, A, 2, 16:00:00
John, A, 2, 16:01:00
Joseph, B, 3, 15:05:00
Joseph, B, 3, 15:06:00
Joseph, B, 3, 15:07:00
提前致谢。
在Python中编写了相同的代码。参考下面Link
这是一个解决方案:
julia> df = DataFrame(Name=["John", "Joseph"], Channel=["A", "B"], Duration=[2,3], Start_Time=Time.(["16:00:00", "15:05:00"]))
2×4 DataFrame
Row │ Name Channel Duration Start_Time
│ String String Int64 Time
─────┼───────────────────────────────────────
1 │ John A 2 16:00:00
2 │ Joseph B 3 15:05:00
julia> flatten(transform(df, [:Start_Time, :Duration] => ByRow((x,y) -> x .+ Minute.(0:y-1)) => :Start_Time), :Start_Time)
5×4 DataFrame
Row │ Name Channel Duration Start_Time
│ String String Int64 Time
─────┼───────────────────────────────────────
1 │ John A 2 16:00:00
2 │ John A 2 16:01:00
3 │ Joseph B 3 15:05:00
4 │ Joseph B 3 15:06:00
5 │ Joseph B 3 15:07:00
如果您可以假设您的 Name/Channel/Duration 组合是独一无二的,并且您想确保代码中的情况也是如此,您也可以这样做:
julia> combine(groupby(df, Not(:Start_Time)), [:Start_Time, :Duration] => ((x, y) -> only(x) .+ Minute.(0:only(y)-1)) => :Start_Time)
5×4 DataFrame
Row │ Name Channel Duration Start_Time
│ String String Int64 Time
─────┼───────────────────────────────────────
1 │ John A 2 16:00:00
2 │ John A 2 16:01:00
3 │ Joseph B 3 15:05:00
4 │ Joseph B 3 15:06:00
5 │ Joseph B 3 15:07:00
我在使用日期时间编写代码时遇到问题。我创建了一个我正在处理的场景。有人可以帮我解决 JULIA 中的代码吗?
输入:
Name, Channel, Duration, Start_time
John, A, 2, 16:00:00
Joseph, B, 3, 15:05:00
输出:
Name, Channel, Duration, Start_time
John, A, 2, 16:00:00
John, A, 2, 16:01:00
Joseph, B, 3, 15:05:00
Joseph, B, 3, 15:06:00
Joseph, B, 3, 15:07:00
提前致谢。
在Python中编写了相同的代码。参考下面Link
这是一个解决方案:
julia> df = DataFrame(Name=["John", "Joseph"], Channel=["A", "B"], Duration=[2,3], Start_Time=Time.(["16:00:00", "15:05:00"]))
2×4 DataFrame
Row │ Name Channel Duration Start_Time
│ String String Int64 Time
─────┼───────────────────────────────────────
1 │ John A 2 16:00:00
2 │ Joseph B 3 15:05:00
julia> flatten(transform(df, [:Start_Time, :Duration] => ByRow((x,y) -> x .+ Minute.(0:y-1)) => :Start_Time), :Start_Time)
5×4 DataFrame
Row │ Name Channel Duration Start_Time
│ String String Int64 Time
─────┼───────────────────────────────────────
1 │ John A 2 16:00:00
2 │ John A 2 16:01:00
3 │ Joseph B 3 15:05:00
4 │ Joseph B 3 15:06:00
5 │ Joseph B 3 15:07:00
如果您可以假设您的 Name/Channel/Duration 组合是独一无二的,并且您想确保代码中的情况也是如此,您也可以这样做:
julia> combine(groupby(df, Not(:Start_Time)), [:Start_Time, :Duration] => ((x, y) -> only(x) .+ Minute.(0:only(y)-1)) => :Start_Time)
5×4 DataFrame
Row │ Name Channel Duration Start_Time
│ String String Int64 Time
─────┼───────────────────────────────────────
1 │ John A 2 16:00:00
2 │ John A 2 16:01:00
3 │ Joseph B 3 15:05:00
4 │ Joseph B 3 15:06:00
5 │ Joseph B 3 15:07:00