对熊猫进行分组分组聚合,并根据受欢迎程度对创建的列表进行排序

时间:2020-03-17 05:24:25

标签: pandas pandas-groupby

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

user_id     course_id       module_id
1           A               1
1           A               2
1           A               3
1           A               4
1           A               5
1           A               6
1           B               5
1           B               8
2           A               8
2           B               5
2           C               6
3           A               2
3           A               3
3           A               9
3           C               10
4           A               3
5           B               5
6           A               3
7           B               5

从上面我想准备下表

course_id          modules             #users        Popular_modules
A                 [1,2,3,4,5,6,8,9]    5             [3,2]
B                 [5,8]                4             [5]
C                 [6,10]               2             []

其中

modules =该课程中的模块列表。

用户=看过该课程的用户数。

Popular_modules =该课程中由多个用户监视的模块列表,并根据该模块上的监视数量(首先是最高监视)对列表进行排序

1 个答案:

答案 0 :(得分:3)

named aggregationSeriesGroupBy.nuniqueSeriesGroupBy.nunique和自定义功能一起使用:

def f(x):
    s = x.value_counts()
    return s.index[s.gt(1)].tolist()


df1 = df.groupby("course_id").agg(modules =('module_id','unique'),
                                  users=("user_id","nunique"), 
                                  Popular_modules= ('module_id', f)).reset_index()
print(df1)
  course_id                   modules  users Popular_modules
0         A  [1, 2, 3, 4, 5, 6, 8, 9]      5          [3, 2]
1         B                    [5, 8]      4             [5]
2         C                   [6, 10]      2              []