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:希望创建一个多重嵌套字典的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框创建嵌套字典

来自 Python 嵌套字典的 Pandas Dataframe

Python 避免字典和元组的多重嵌套

从嵌套列表创建字典 [重复]

使用Python从CSV文件创建嵌套字典

如何使用熊猫从嵌套字典创建数据框?