Pandas按ID分组并计算单元格中数组的平均值(值)

时间:2017-06-09 21:23:34

标签: performance pandas group-by

我的数据看起来像这样(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但是没有设法使用它来取代数组。

1 个答案:

答案 0 :(得分:0)

这是一个在20分钟内为我完成工作的单行程序:

val_dict = {k: aggregate_fun(list(v)) for k,v in df_id_d2v.groupby("id")["vector"]}