Pandas:希望创建一个多重嵌套字典
Posted
技术标签:
【中文标题】Pandas:希望创建一个多重嵌套字典【英文标题】:Pandas: Looking to create a multiple nested dictionary 【发布时间】:2022-01-19 02:58:28 【问题描述】:这是我想要生成的内容:
A: 1: [1,2], 2: [2,5],
B: 3: [1,4], 4: [7,8]
这是df:
id sub_id
A 1
A 2
B 3
B 4
我有以下数组:
[[1,2],
[2,5],
[1,4],
[7,8]]
到目前为止,我有以下代码:
sub_id_array_dict = dict(zip(df['sub_id'].to_list(), arrays))
这会产生以下字典:
1: [1,2],
2: [2,5],
3: [1,4],
4: [7,8]
现在,我觉得我走错了路,因为我不知道如何将它提升到 id
级别。
任何帮助将不胜感激。
【问题讨论】:
你的数据框中的字母是否真的有点? 不,抱歉。更新 【参考方案1】:通过一个简单的循环,可以这样做:
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
【讨论】:
这是一个更清晰的答案 +1。 这太好了,谢谢!现在,我应该将其包含在我最初的问题中,但您认为此解决方案能否很好地扩展?我的实际数据集包含 600K id 和 100M sub_id。如果你愿意,我可以在一个新问题中提出这个问题。 @MadhavThaker,对于这样的数字,Python 中的循环如下所示是一种不好的方法。我认为这是不同的,所以你应该创建一个新问题。 好的,会的,谢谢。【参考方案2】:你可以使用pivot
:
df['col'] = your_array
out = k: kk:vv for kk,vv in v.items() if vv is not np.nan for k,v in df.pivot("sub_id","id",'col').to_dict().items()
您也可以使用dict.setdefault
完成相同的工作:
out =
for i, j, l in zip(df['id'].to_list(), df['sub_id'].to_list(), your_array):
out.setdefault(i, ).setdefault(j, )
out[i][j] = l
输出:
'A': 1: [1, 2], 2: [2, 5], 'B': 3: [1, 4], 4: [7, 8]
【讨论】:
以上是关于Pandas:希望创建一个多重嵌套字典的主要内容,如果未能解决你的问题,请参考以下文章