如何将dict转换为多索引数据帧

2024-03-29 06:50:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理不同属性(例如A、B等)的元素(例如a1、a2等)之间的距离,并选择Adict来存储距离。dict具有以下形式:

mydict = {('A', ('a1','a2')): 1.0,
          ('A', ('a1','a3')): 0.5,
          ('A', ('a2','a1')): 1.1,
          ('A', ('a2','a3')): 0.8,
          ('A', ('a3','a1')): 1.2,
          ('A', ('a3','a2')): 1.2,
          ('B', ('b1','b2')): 1.0,
          ('B', ('b1','b3')): 0.5,
          ('B', ('b2','b1')): 1.1,
          ('B', ('b2','b3')): 0.8,
          ('B', ('b3','b1')): 1.2,
          ('B', ('b3','b2')): 1.2,
          }

因此dict的键是tuple,第一个元素给出属性,第二个元素是tuple本身给出两个元素,相应的值中给出了距离

现在我想以交叉表的形式显示数据,它应该看起来有点像这样:

A   a1   a2   a3
a1    0  1.0   0.5
a2  1.1    0   0.8
a3  1.2  1.2    0

B   b1   b2   b3
b1    0  1.0   0.5
b2  1.1    0   0.8
b3  1.2  1.2    0

对于每个属性,依此类推

我试图将数据转换为DataFrame,以便使用pandas的casstab函数。我试图将dict的键转换成一个列表,然后使用pandas.MultiIndex.from_tuplesMultiIndex.to_frame,但没有得到可用的格式

对于如何处理这个问题,或者如何以不同的方式存储距离数据,有什么建议吗


Tags: 数据a2元素距离pandas属性a1b2
1条回答
网友
1楼 · 发布于 2024-03-29 06:50:17

我认为数据的格式很好。您只需要正确地将其解包即可获得可用的数据帧

  • 从dict值和dict键构造数据帧
  • 将包含元素名称的索引级别解压缩为两列
  • 使用适当的索引和列应用交叉表(对结果应用.fillna(0),以获得与您的问题完全相同的结构)
^{pr 1}$

相关问题 更多 >