首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >朱莉娅DataFrames.jl双群

朱莉娅DataFrames.jl双群
EN

Stack Overflow用户
提问于 2021-01-22 13:46:32
回答 1查看 181关注 0票数 1

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

我有一个表示客户机侦听(音乐)、一个user_key =一个客户机、一个客户机可以有多个行的数据。我有很多专栏,如日期,客户所听的类型,专辑名称.还有一个名为TOTAL_LISTENED的专栏,它代表了这个客户端听专辑的时间,哪个应用程序等等。

代码语言:javascript
复制
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                 │

total_listened没有在这里打印,所以我把它放在下面

代码语言:javascript
复制
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

我希望每个客户端按每一列进行聚合,并计算这个total_listened的总和。

例如,假设客户‘0000e19d6a5608e3787e5b羽毛98488ca’,我想知道他听了多少古典音乐,有多少听过专辑“舒曼:单簧管音乐”等等。

我需要做一个双组,user_key和其他列,然后加和total_listened列,但我无法使它工作。

当我试图在groupby中执行groupby时,它告诉我不能通过groupedDataFrame进行分组。

另外,我也不知道如何轻松地复制这个数据,如果您愿意,我可以直接与您共享CSV。

我想要的结果:

genre_main -> I groupby user_key,genre_main然后在total_listened上做一个之和,给出每种类型的total_listened,然后我只想保留在用户收听总数的33%以上的体裁(所有的体裁都在一个列中,其中一个字符串由',‘分隔)。

app_short_name ->和genre_main完全一样。

album_name ->只需获得前1张专辑(我猜我知道该如何做,按album_name分组并先做|>排序时,只需将total_listened相加即可)

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-22 15:29:21

首先,请将DataFrames.jl更新到最新版本0.22,以获得包的最新特性和错误修复。

要获得按体裁分列的总收听量,请做:

代码语言:javascript
复制
combine(groupby(df, [:USER_KEY, :GENRE_MAIN]), :TOTAL_LISTENED => sum)

要获得按专辑所听的全部内容,只需:

代码语言:javascript
复制
combine(groupby(df, [:USER_KEY, :ALBUM_NAME]), :TOTAL_LISTENED => sum)

这就是你要找的吗?

编辑:

genre_main -> I groupby user_key,genre_main然后在total_listened上做一个之和,给出每种类型的total_listened,然后我只想保留在用户收听总数的33%以上的体裁(所有的体裁都在一个列中,其中一个',‘分隔')。

可以这样做:

代码语言:javascript
复制
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_LISTENED:FREQUENT_GENRES两列的数据框架。我假设您可以类似地完成问题的第二部分,例如在:USER_LISTENED上加入结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65846403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档