Julia DataFrames.jl双分组依据

Julia DataFrames.jl双分组依据,dataframe,julia,Dataframe,Julia,最近我一直在努力解决这个问题,我想也许有人能帮我解决这个问题,问题是: 我有一个数据帧,它表示一个客户机所听的内容(音乐),一个用户\u key=一个客户机,一个客户机可以有许多行。 我有很多专栏,比如流的日期、客户收听的类型、专辑名。。。。还有一个名为TOTAL_Listend的列,表示该客户在哪个应用程序上收听专辑的时间等 1000×9 DataFrame. Omitted printing of 2 columns │ Row │ USER_KEY

最近我一直在努力解决这个问题,我想也许有人能帮我解决这个问题,问题是:

我有一个数据帧,它表示一个客户机所听的内容(音乐),一个用户\u key=一个客户机,一个客户机可以有许多行。 我有很多专栏,比如流的日期、客户收听的类型、专辑名。。。。还有一个名为TOTAL_Listend的列,表示该客户在哪个应用程序上收听专辑的时间等

1000×9 DataFrame. Omitted printing of 2 columns
│ Row  │ USER_KEY                         │ STREAM_DATE │ GENRE_MAIN        │ ALBUM_NAME                                           │ ALBUM_ARTIST_NAME              │ APP_SHORT_NAME │ USER_TRIAL_STATUS │
│      │ String                           │ Dates.Date  │ String            │ String                                               │ String                         │ String         │ Bool              │
├──────┼──────────────────────────────────┼─────────────┼───────────────────┼──────────────────────────────────────────────────────┼────────────────────────────────┼────────────────┼───────────────────┤
│ 1    │ 0000e19d6a5608e3787e5bfea98488ca │ 2021-01-16  │ CLASSICAL         │ The Liszt Collection                                 │ VARIOUS ARTISTS                │ app_1          │ 0                 │
│ 2    │ 0000e19d6a5608e3787e5bfea98488ca │ 2021-01-19  │ CLASSICAL         │ Schumann: Music for Clarinet                         │ PATRICK MESSINA                │ app_1          │ 0                 │
│ 3    │ 0000e19d6a5608e3787e5bfea98488ca │ 2021-01-16  │ CLASSICAL         │ Schumann: Music for Clarinet                         │ PATRICK MESSINA                │ app_1          │ 0                 │
│ 4    │ 0000e19d6a5608e3787e5bfea98488ca │ 2020-12-28  │ JAZZ              │ Turn Up The Quiet                                    │ DIANA KRALL                    │ app_2          │ 0                 │
│ 5    │ 0000e19d6a5608e3787e5bfea98488ca │ 2021-01-03  │ CLASSICAL         │ Johann Sebastian Bach                                │ VÍKINGUR ÓLAFSSON              │ app_1          │ 0                 │
│ 6    │ 0000e19d6a5608e3787e5bfea98488ca │ 2021-01-20  │ CLASSICAL         │ Barbara Bonney - The Radiant Voice of Barbara Bonney │ BARBARA BONNEY                 │ app_1          │ 0                 │
│ 7    │ 0000e19d6a5608e3787e5bfea98488ca │ 2020-12-22  │ CLASSICAL         │ The Liszt Collection                                 │ VARIOUS ARTISTS                │ app_1          │ 0                 │
⋮
│ 993  │ 000a149099a55a6e74fd253ab3f5709d │ 2020-12-30  │ CLASSICAL         │ Handel: Concerti grossi, Op. 6 Nos. 1-6              │ AKADEMIE FÜR ALTE MUSIK BERLIN │ app_2          │ 0                 │
│ 994  │ 000a149099a55a6e74fd253ab3f5709d │ 2021-01-01  │ SOUL / FUNK / R&B │ Gold - 20 Super Hits (International)                 │ BONEY M.                       │ app_2          │ 0                 │
│ 995  │ 000a149099a55a6e74fd253ab3f5709d │ 2020-12-25  │ SOUL / FUNK / R&B │ Gold - 20 Super Hits (International)                 │ BONEY M.                       │ app_2          │ 0                 │
│ 996  │ 000a149099a55a6e74fd253ab3f5709d │ 2021-01-08  │ CLASSICAL         │ Vivaldi: Concertos For Two Violins                   │ VIKTORIA MULLOVA               │ app_2          │ 0                 │
│ 997  │ 000a149099a55a6e74fd253ab3f5709d │ 2021-01-09  │ CLASSICAL         │ Wagner: Tannhäuser                                   │ GIUSEPPE SINOPOLI              │ app_6          │ 0                 │
│ 998  │ 000a149099a55a6e74fd253ab3f5709d │ 2021-01-17  │ CLASSICAL         │ Cyrillus Kreek - The Suspended Harp of Babel         │ VOX CLAMANTIS                  │ app_2          │ 0                 │
│ 999  │ 000a149099a55a6e74fd253ab3f5709d │ 2020-12-25  │ REGGAE            │ Exodus 30th Anniversary Edition                      │ BOB MARLEY & THE WAILERS       │ app_2          │ 0                 │
│ 1000 │ 000a149099a55a6e74fd253ab3f5709d │ 2021-01-08  │ CLASSICAL         │ Double concertos                                     │ SIMON STANDAGE                 │ app_2          │ 0                 │
这里没有打印,所以我把它放在下面

df[:TOTAL_LISTENED]
1000-element Array{Float64,1}:
 4161.0
 3909.0
 3465.0
 2172.0
 2040.0
 1742.0
 1666.0
 1646.0
 1513.0
 1450.0
    ⋮
  659.0
  653.0
  652.0
  652.0
  650.0
  649.0
  647.0
  643.0
  642.0
我想让每个客户机按每列进行聚合,并计算出这个总数的总和

例如,假设客户“0000e19d6a5608e3787e5bfea98488ca”,我想知道他听了多少古典音乐,听了多少专辑“舒曼:单簧管音乐”等等

我需要做两个groupby,user_键和其他列,然后对整个列求和,但我不能让它工作

当我尝试在groupby中执行groupby时,它告诉我不能使用groupedDataFrame进行groupby

此外,我真的不知道如何轻松地复制此数据帧,如果您愿意,我可以直接与您共享CSV

我想要的结果是:

体裁\u main->i groupby user\u key,体裁\u main然后对total\u seeded进行一个求和,它给出了每个体裁的total\u seeded,然后我只想保留占用户总收听量>33%的体裁(所有>33%的体裁在一列中作为一个字符串,以“,”分隔)

app\u short\u name->与genre\u main完全相同

album_name->只需获得前1张专辑(我知道怎么做,我想,只需将按album_name分组时听到的总数相加,然后首先进行排序|>)


非常感谢

首先,请将DataFrames.jl更新到最新的0.22版本,以获得软件包的最新功能和错误修复

要按流派获得总收听量,请执行以下操作:

combine(groupby(df, [:USER_KEY, :GENRE_MAIN]), :TOTAL_LISTENED => sum)
要获得专辑的总收听量,只需执行以下操作:

combine(groupby(df, [:USER_KEY, :ALBUM_NAME]), :TOTAL_LISTENED => sum)
这就是你要找的吗

编辑:

体裁\u main->i groupby user\u key,体裁\u main然后对total\u Listed做一个求和,它给出了每个体裁的total\u Listed,然后我只想保留占用户总收听量>33%的体裁(所有>33%的体裁在一列中作为一个字符串,以“,”分隔)

可以这样做:

using Chain # to make reading the pipe easier
@chain df begin
    groupby(:USER_KEY)
    transform(:TOTAL_LISTENED => (x -> x ./ sum(x) => :FRACTION_LISTENED)
    groupby([:USER_LISTENED, :GENRE_MAIN])
    combine(:FRACTION_LISTENED => sum => :FRACTION_LISTENED)
    filter(:FRACTION_LISTENED => >=(0.33), _)
    groupby(:USER_LISTENED)
    combine(:GENRE_MAIN => (x -> join(x, ",")) => :FREQUENT_GENRES)
end
我是从我的头脑中写出来的,但这是做这件事的方法。
因此,您将得到一个包含两列的数据帧
:USER\u listed
:frequency\u GENRES
。我假设你可以类似地完成问题的第二部分,然后加入
:USER_listed

上的结果。好的,我更新为0.22是的,这是我想要的,但我如何才能在没有OTU的情况下对这些列中的每一列进行合并,然后重新分组和重新组合等最后,我想要一个数据帧,每个列的总输入和所需输出。你能不能显示一些示例输入和所需输出,因为我不清楚你想要的是什么。是的,我编辑了我想要的结果,我希望它可以理解=|好,所以确实有效谢谢你。难道没有比为每个人执行链接groupby->combine更好的解决方案吗?因为我有很多,所以它会非常大,可能不是很容易记忆=)这对你来说太慢了吗?一般来说,在上述管道中,所有步骤都需要按照您的要求进行。