如何过滤数据框中的列?

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 的贡献者之一。