Pandas 数据框到 dict 的 dict
Posted
技术标签:
【中文标题】Pandas 数据框到 dict 的 dict【英文标题】:Pandas dataframe to dict of dict 【发布时间】:2018-12-02 21:49:48 【问题描述】:给定以下 pandas 数据框:
ColA ColB ColC
0 a1 t 1
1 a2 t 2
2 a3 d 3
3 a4 d 4
我想要一本字典。
但我只设法创建了以下内容:
d = t : [1, 2], d : [3, 4]
作者:
d = k: list(v) for k,v in duplicated.groupby("ColB")["ColC"]
如何获取dict的dict:
dd = t : a1:1, a2:2, d : a3:3, a4:4
【问题讨论】:
【参考方案1】:您可以事先使用groupby
+ apply
步骤来执行此操作。
dd = df.set_index('ColA').groupby('ColB').apply(
lambda x: x.ColC.to_dict()
).to_dict()
或者,使用 dict 理解:
dd = k : g.ColC.to_dict() for k, g in df.set_index('ColA').groupby('ColB')
print(dd)
'd': 'a3': 3, 'a4': 4, 't': 'a1': 1, 'a2': 2
【讨论】:
【参考方案2】:这个答案的重点是表明有一种直接的方法可以使用标准库中的简单迭代和工具来做到这一点。
我们经常在 Pandas DataFrame 上执行许多转换,其中每个转换都会调用新 Pandas 对象的构造。有时,这可能是一个直观的进展,并且非常有意义。然而,有时我们会忘记我们可以使用更简单的工具。我相信这是其中之一。我的答案仍然使用 Pandas,因为我使用 itertuples
方法。
from collections import defaultdict
d = defaultdict(dict)
for a, b, c in df.itertuples(index=False):
d[b][a] = c
d = dict(d)
d
't': 'a1': 1, 'a2': 2, 'd': 'a3': 3, 'a4': 4
轻微的选择。由于我们正在迭代的元组被命名为元组,我们可以通过它所代表的列的名称来访问每个元素。
from collections import defaultdict
d = defaultdict(dict)
for t in df.itertuples():
d[t.ColB][t.ColA] = t.ColC
d = dict(d)
d
't': 'a1': 1, 'a2': 2, 'd': 'a3': 3, 'a4': 4
【讨论】:
以上是关于Pandas 数据框到 dict 的 dict的主要内容,如果未能解决你的问题,请参考以下文章