我的数据看起来像这样(pandas数据框大约有10,000,000行):
ID | Value
其中ID是每个用户的唯一ID,并且与值相关联,该值是300维的数组。使用不同的值(数组)可以多次出现相同的ID。我想,对于每个唯一的ID,取所有相关数组的平均值,所以我最终得到一个数据框(或字典),其中一个ID只出现一次并且有一个300维数组作为值(以前所有数组的平均值)与该ID相关联。)
目前,我通过ID循环数据帧过滤:
ifa_vec = dict()
for uid in df_id_vec['id'].unique():
ifa_vec[uid] = aggregate_fun(np.matrix(
df_id_vec[df_id_vec['id']==uid]['vector'].tolist()))
然而,自然地,循环很慢,这需要几天时间。有没有更有效的方法来做到这一点?我知道groupby但是没有设法使用它来取代数组。
答案 0 :(得分:0)
这是一个在20分钟内为我完成工作的单行程序:
val_dict = {k: aggregate_fun(list(v)) for k,v in df_id_d2v.groupby("id")["vector"]}