【发布时间】:2019-09-30 14:54:25
【问题描述】:
我正在尝试从 pandas 数据框生成字典。具体来说,我需要:
取前 (x) 列,并将每行中的数据点一起用作键。
为每个键编译一个字典,使用行中剩余的数据点作为值,作为一个列表。
为了简单起见,让我们使用这个示例数据框。
- 生成数据框:
df = pd.DataFrame([
{'c1':a1, 'c2':110, 'c3':'xyz', 'c4':24},
{'c1':b2,'c2':100, 'c3':'jdf', 'c4':15},
{'c1':a1,'c2':110, 'c3':'kjl', 'c4':125},
{'c1':b2, 'c2':100, 'c3':'abc', 'c4':71},
])
c1 c2 c3 c4
0 a1 110 xyz 24
1 b2 100 jdf 15
2 a1 110 kjl 125
3 b2 100 abc 71
- 产生以下内容:
new_dict = some code
new_dict
{('a1', 110): [['xyz', 24], ['kjl', 125]], ('b2', 100): [['jdf', 15], ['abc', 71]]}
我已经尝试了很多很多事情,包括为键创建一个元组列表,将唯一列表作为键分配给新字典(值为空列表)——但我无法填充这些值。
我能够编译一个以单列作为键的字典,并根据需要编译其他所有内容,如下所示:
test_dict = {}
for index, row in df.iterrows():
if row['c1'] in test_dict:
test_dict[row['c1']].append([row['c2'], row['c3'], row['c4']])
else:
test_dict[row['c1']] = []
test_dict[row['c1']].append([row['c2'], row['c3'], row['c4']])
但我无法将多列组合为键。
【问题讨论】:
-
感谢@Accumulation 指出我的样本数据中的差异。我已经编辑了这个例子。您的解决方案完美运行。非常感谢!
标签: python pandas list dictionary