给出以下熊猫数据框:
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"]}
我如何获取字典的字典:
dd = {t : {a1:1, a2:2}, d : {a3:3, a4:4}}
答案 0 :(得分:11)
您可以先执行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}}
答案 1 :(得分:7)
这个答案的重点是表明,有一种简单的方法可以使用标准库中的简单迭代和工具来做到这一点。
通常,我们在Pandas DataFrame上执行许多转换,其中每个转换都调用一个新的Pandas对象的构造。有时这可能是一种直观的进步,并且非常有意义。但是,有时我们会忘记可以使用更简单的工具。我相信这是那些时代之一。我的答案仍然使用Pandas,因为我使用的是Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer
With IE
.Visible = True
.navigate "http://www.gpsvisualizer.com/geocoder/"
While .Busy Or .readyState < 4: DoEvents: Wend
.document.querySelector("input[onclick*='this.form.action']").Click
' .document.getElementsByTagName("input")(8).Click
Stop '<==Delete me
.Quit
End With
End Sub
方法。
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}}