Mik*_*ter 3 datetime dataframe julia dataframes.jl
我有一长串日期(从 1942-1-1 00:00:00 到 2012-12-31 24:00:00)。这些分别与一些金额相关(见下文)。有没有办法先单独过滤一天的所有金额,然后将它们加在一起?
例如,对于 1942-01-01,如何找到这一天(从时间 0 到 24)发生的所有值(金额),然后将它们加在一起?
time amount
DateTime Float64
1942-01-01T00:00:00 7.0
1942-01-02T00:00:00 0.2
1942-01-03T00:00:00 2.1
1942-01-04T00:00:00 3.0
:
2012-12-31T23:00:00 4.0
2012-12-31T24:00:00 0.0
Run Code Online (Sandbox Code Playgroud)
df = CSV.read(path, DataFrame)
for i in 1:24
filter(r ->hour(r.time) == i, df)
end
Run Code Online (Sandbox Code Playgroud)
小智 6
加载InMemoryDatasets.jl并使用format每日汇总,
using InMemoryDatasets
ds=Dataset(time=DateTime("1942-01-01"):Hour(1):DateTime("2012-12-31"))
ds.amount = rand(nrow(ds))
DateValue(x) = Date(x)
setformat!(ds, :time=>DateValue)
combine(gatherby(ds,:time), :amount=>IMD.sum)
Run Code Online (Sandbox Code Playgroud)
小智 5
不明白接受的答案是如何回答问题的,但让我使用 IMD 包给出另一个答案,
using InMemoryDatasets
ds=Dataset(time=DateTime("1942-01-01"):Hour(1):DateTime("2012-12-31"))
ds.amount = rand(nrow(ds))
datefmt(x) = round(x, Hour, RoundDown)
setformat!(ds, :time=>datefmt)
combine(gatherby(ds,:time), :amount=>IMD.sum)
Run Code Online (Sandbox Code Playgroud)
PS:我是 IMD 的贡献者之一。