python - Python 嵌套字典中的内部值无故更改
问题描述
我正在尝试创建一个由 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()
推荐阅读
- r - 在传单 R 中创建最小网格
- javascript - 自定义函数将 Vue.js 数据值更改为副作用
- python - Django 从查询集中获取查询。返回无效参数
- jestjs - 如何配置 jest 来处理 SvelteKit 的 `$lib` 别名?
- spring-cloud - 如何将 DefaultMessageListenerContainer 与 Spring 的 SqsListener 一起使用?
- mule-studio - Scatter-Gather 中的错误处理 (Mule 4)
- git - 为什么使用高延迟网络时 git 很慢
- android - Jetpack Compose Preview 使用 ThreeTen 的 LocalDate.now() 失败
- c++ - 使用柯南时需要上网吗?
- java - java中批量运算的计算器