這是我的資料:
df:
id sub_id
A 1
A 2
B 3
B 4
我有以下陣列:
[[1,2],
[2,5],
[1,4],
[7,8]]
這是我的代碼:
from collections import defaultdict
sub_id_array_dict = defaultdict(dict)
for i, s, a in zip(df['id'].to_list(), df['sub_id'].to_list(), arrays):
sub_id_array_dict[i][s] = a
現在,我的實際資料幀總共包含 100M 行(唯一 sub_id)和 500K 個唯一 ID。理想情況下,我想避免 for 回圈。
任何幫助將非常感激。
uj5u.com熱心網友回復:
假設arrays變數的行數與 Dataframe 中的行數相同,
df['value'] = arrays
通過分組轉換成字典
df.groupby('id').apply(lambda x: dict(zip(x.sub_id, x.value))).to_dict()
輸出
{'A': {1: [1, 2], 2: [2, 5]}, 'B': {3: [1, 4], 4: [7, 8]}}
uj5u.com熱心網友回復:
您可以分配arrays給一列,然后使用pivot:
df['value'] = arrays
out = df.pivot('sub_id','id','value').to_dict()
輸出:
{'A': {1: [1, 2], 2: [2, 5], 3: nan, 4: nan},
'B': {1: nan, 2: nan, 3: [1, 4], 4: [7, 8]}}
如果你想擺脫NaNs:
new_out = {key: {k:v for k,v in val.items() if v is not np.nan} for key, val in out.items()}
輸出:
{'A': {1: [1, 2], 2: [2, 5]}, 'B': {3: [1, 4], 4: [7, 8]}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386385.html
