【发布时间】:2019-05-17 16:41:45
【问题描述】:
我有一个大约 2 亿行的 pandas DataFrame,如下所示:
UserID MovieID Rating
1 455 5
2 411 4
1 288 2
2 300 3
2 137 5
1 300 3
...
我想按评分降序排列每个用户的前 N 部电影,因此对于 N=2,输出应如下所示:
UserID MovieID Rating
1 455 5
1 300 3
2 137 5
2 411 4
当我尝试这样做时,我得到一个由“groupby”引起的“内存错误”(我的机器上有 8gb 的 RAM)
df.sort_values(by=['rating']).groupby('userID').head(2)
有什么建议吗?
【问题讨论】:
-
排序会很昂贵,而且一切都在内存中,如果可能的话,使用 minHeap (显然你需要以某种方式离开 DF)?
-
@SMA 排序实际上在 10 分钟内完成并且不是问题(除了相对较慢),只有当我添加 groupby 部分时它才会崩溃。
-
2 亿远远超出了 pandas 的处理能力。尝试使用 dask 或 spark。
-
鉴于排序有效,您可以使用 Numpy 操作来替换
groupby(请参阅我的答案的第一部分)。如果失败了,那么您几乎会被批处理解决方案(如 Avi 所建议的那样)或重型解决方案(如 Coldspeed 所建议的那样)所困扰。
标签: python python-3.x pandas numpy pandas-groupby