Julia (Julia-lang) 如何获取数据帧的子集并按组对不同的活动进行计数?

Teo*_*eor 2 julia

我正在尝试获取数据框的子集。起始点必须是当月的第一天。终点必须是当天。之后,我想按组统计不同的活动。

数据框:

date        | activity

06-07-2020  | walking

06-07-2020  | rucking

07-07-2020  | tennis
...
Run Code Online (Sandbox Code Playgroud)

我尝试过:

DfName[Dates.firstdayofmonth(Dates.today()):Dates.today(), :]
Run Code Online (Sandbox Code Playgroud)

结果 :

ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type Dates.Day
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

combine(groupby(DfName, :activity), nrow => :count)    

@where(DfName, :date .>= Dates.firstdayofmonth(Dates.today()), :date .<= Dates.today())`
Run Code Online (Sandbox Code Playgroud)

结果 :

@where(DfName, :date .>= Dates.firstdayofmonth(Dates.today()), :date .<= Dates.today())
ERROR: MethodError: no method matching isless(::Dates.Date, ::String)
Closest candidates are:
  isless(::DataValues.DataValue{Union{}}, ::Any) at /home/...
  isless(::PyObject, ::Any) at /home/...
Run Code Online (Sandbox Code Playgroud)

我怎样才能在朱莉娅做到这一点?

Bog*_*ski 5

使用以下内容:

filter(:date => x -> Dates.firstdayofmonth(Dates.today()) <= x <= Dates.today(), DfName)
Run Code Online (Sandbox Code Playgroud)

或者

filter(row -> Dates.firstdayofmonth(Dates.today()) <= row.x <= Dates.today(), DfName)
Run Code Online (Sandbox Code Playgroud)

或者

DfName[Dates.firstdayofmonth(Dates.today()) .<= DfName.date .<= Dates.today(), :]
Run Code Online (Sandbox Code Playgroud)

或(很快将在 DataFrames.jl 1.0 版本中发布):

subset(DfName,
       :date => ByRow(>=(Dates.firstdayofmonth(Dates.today())),
       :date => ByRow(<=(Dates.today())
      )
Run Code Online (Sandbox Code Playgroud)