Groupby聚合并根据熊猫中的条件创建字典

丹麦文

我有如下所示的数据框。该表说明了用户在每门课程中观看的模块。

user_id     course_id       module_id
1           1               1
1           1               2
1           1               3
1           1               4
1           1               5
1           1               6
1           2               5
1           2               8
2           1               8
2           2               5
2           3               6
3           1               2
3           1               3
3           1               9
3           3               10

根据以上数据,我想准备下表。

预期产量:

user_id     courses   Num_ofcourses     Total                         Total_Modules
1           [1,2]     2                 {1:[1,2,3,4,5,6], 2:[5,8]}    8
2           [1,2,3]   3                 {1:[8], 2:[5], 3:[6]}         3 
3           [1,3]     2                 {1:[2,3,9], 3:[10]}           4    
耶斯列尔

想法是先创建嵌套的字典对于Total柱,然后聚集GroupBy.aggSeriesGroupBy.uniqueSeriesGroupBy.nuniqueGroupBy.size和最后添加新列的DataFrame.insertIndex.map

s = df.groupby(['user_id','course_id'])['module_id'].apply(list)
d = {x: s.xs(x).to_dict() for x in s.index.levels[0]}

df1 = df.groupby('user_id').agg(courses=('course_id','unique'),
                               Num_ofcourses=('course_id','nunique'),
                               Total_Modules=('module_id','size'))

df1.insert(2, 'Total', df1.index.map(d))
df1 = df1.reset_index()
print (df1)
   user_id    courses  Num_ofcourses                               Total  \
0        1     [1, 2]              2  {1: [1, 2, 3, 4, 5, 6], 2: [5, 8]}   
1        2  [1, 2, 3]              3            {1: [8], 2: [5], 3: [6]}   
2        3     [1, 3]              2             {1: [2, 3, 9], 3: [10]}   

   Total_Modules  
0              8  
1              3  
2              4  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章