繁体   English   中英

如何创建具有 2 个键的字典,其中第一个键是索引,第二个键来自列表,值来自 df 的列?

[英]How can I create a dictionary with 2 keys where the the first key is the index, the second key is from a list and the values from columns of a df?

我有一个数据框(下面的小例子),列 t 和机器 1 - 5。

speed_dict = {'Machine 1': {1: 3, 2: 2, 3: 2, 4: 3, 5: 0, 6: 1, 7: 5, 8: 5, 9: 5, 10: 5},
              'Machine 2': {1: 1, 2: 6, 3: 5, 4: 1, 5: 3, 6: 3, 7: 5, 8: 3, 9: 2, 10: 5},
              'Machine 3': {1: 1, 2: 5, 3: 0, 4: 4, 5: 2, 6: 6, 7: 2, 8: 2, 9: 2, 10: 5},
              'Machine 4': {1: 3, 2: 2, 3: 1, 4: 4, 5: 2, 6: 4, 7: 0, 8: 0, 9: 2, 10: 2},
              'Machine 5': {1: 1, 2: 4, 3: 4, 4: 4, 5: 7, 6: 7, 7: 7, 8: 0, 9: 3, 10: 8}}

speed = pd.DataFrame.from_dict(speed_dict)

我想创建一个有 2 个键的字典,一个是时间,另一个是机器,但只有 1 到 4。它应该如下所示:

{(1, 'm1'): 3,
 (2, 'm1'): 2,
.
.
.
(9, 'm4'): 2,
(10, 'm4'): 2}

我可以使用字典理解为每台机器创建单独的字典:

# Machines
machines = ['m1', 'm2', 'm3', 'm4']    
# Running time
time = speed.index.to_list()
# Speed
# Machine 1
speed_M1 = speed['Machine 1'].to_list()
speed_time_M1 = {time[i]: speed_M1[i] for i in range(len(time))}

但这给出的输出为: {1: 3, 2: 2, 3: 2, 4: 3, 5: 0, 6: 1, 7: 5, 8: 5, 9: 5, 10: 5}这是关闭但还不完全在那里。

有没有办法做到这一点?

感谢@It_is_Chris 对答案发表评论。

以下工作完美:

speed[speed.columns[:-1]].stack().to_dict()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM