python - Python 嵌套字典中的内部值无缘无故地发生变化

标签 python pandas dictionary nested

我正在尝试创建一个由 Pandas 数据框中的两列索引的嵌套字典,但每次将新键添加到内部字典时,内部值都会发生变化。

我的目的是拥有一个字典,其键是一个数据帧列中的值,其值是带有来自另一列的键的字典,其中内部字典的值来自第三列。我从嵌套字典的空白结构开始,迭代数据帧的行,并相应地更新字典值。

(我将演示我的意思以及我对虚拟值的尝试。)

import pandas as pd

df = pd.DataFrame({'label': ['a1', 'a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2'],
                   'concept': ['b1', 'b2', 'b3', 'b4', 'b1', 'b2', 'b3', 'b4'],
                   'value': [1, 0.5, 0.2, 0.7, 0.6, 0.4, 0.8, 0.7]})
results = dict.fromkeys(df['b'].unique(), dict.fromkeys(df['a'].unique(), 0))

for i, row in df.iterrows():
    results[row['concept']][row['label']] = row['value']

期望得到的是:

{
  ‘b1’: {
    ‘a1’: 1.0,
    ‘a2’: 0.6
  },
  ‘b2’: {
    ‘a1’: 0.5,
    ‘a2’: 0.6,
  },
  ‘b3’: {
    ‘a1’: 0.2,
    ‘a2’: 0.8,
  },
  ‘b4’: {
    ‘a1’: 0.7,
    ‘a2’: 0.7
  }
}

但是,每次循环遇到已经存在的 b 值时,它都会正确地将新的内部 a 键添加到具有正确值的字典中但会更改之前添加的值。所以对于上面的例子我得到:

{
  'b1': {
    'a1': 0.7,
    'a2': 0.7
  },
  ‘b2’: {
    ‘a1’: 0.7,
    ‘a2’: 0.7,
  },
  ‘b3’: {
    ‘a1’: 0.7,
    ‘a2’: 0.7,
  },
  ‘b4’: {
    ‘a1’: 0.7,
    ‘a2’: 0.7
  }
}

我确信我一定错过了一些非常明显的东西,但这让我想用头撞墙!任何人都可以提供任何见解吗?我尝试了另一种方法,使用新的数据框,其中标签和概念分别作为列和索引,但与嵌套字典相比,逐个填充每个单元格太慢了。

最佳答案

尝试旋转表格,然后转换为字典。

df.pivot_table(index='label',columns='concept',values='value').to_dict()

关于python - Python 嵌套字典中的内部值无缘无故地发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57595556/

相关文章:

python - 将文本拆分成句子

python - 如果值重叠,则合并 pandas dfs 列,否则分配默认值

Python:索引列表列表的问题

python - 在内置函数中赋值

Python:字典中的字典?

python - 如何更改 Pandas Dataframe 的形状(行号为 "L")?

python - 将键值对添加到基于另一个列表 Python 的字典列表中

iphone - Iphone SDK 中的特殊 TableView

python - 防止 Sublime Text 覆盖 .sublime-project

python - 根据另一个 DataFrame 中的行选择一个 DataFrame 中的行