2017-06-09 36 views
1

我的數據看起來像這樣(大約10,000,000行的熊貓數據幀)組:熊貓通過在細胞(值)陣列的ID和計算平均

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

你不應該存儲陣列在數據幀的元素。數據框最適合「整潔」數據http://vita.had.co.nz/papers/tidy-data.html。對於這種情況,我只是把你的數組放在一個字典中。 –

+0

的確,但有時您無法選擇您的數據的格式。 – simonst

+0

當然。我說在這種情況下數組字典可能比數據幀更好。 –

回答

0

這裏是一個一行是在20分鐘內做的工作對我來說:

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