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 = 该课程中由多个用户观看的模块列表,并根据该模块上的观看次数对列表进行排序(最初观看次数最多)
解决方案
使用named aggregation
withSeriesGroupBy.nunique
和SeriesGroupBy.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 []
推荐阅读
- c - 由于指针,乘法结果总是为零?
- javascript - 如何验证用户字符串输入不包含 sql 注入?在 Javascript 中
- angular - 如何更新 MongoDB 中的单个字段?
- java - Spring数据查询子字符串
- python-3.x - 如何从 class/def 函数加载 csv,然后如何使其读取/打印行和列?
- html - 如何对表格单元格强制使用相同的宽度?
- node.js - 为什么不能实例化一个空的 Angular 应用程序?
- laravel - 在 Laravel 中处理高频率的 API 调用
- javascript - 带有位置的粘性导航中的 CLS(累积布局移位):固定
- image - Flutter 2 seconds 在页面加载和 ater 2 secons 成功显示时显示错误