用多索引值制作字典

时间:2019-01-29 14:53:36

标签: python pandas

我有以下多索引数据框。

Connector Pin Color  Y/N?           
F123      1       R   NaN
          2       O   NaN
          3       Y   NaN
          4      GR   NaN
          5       L   NaN
          6       R   NaN
          7       B   NaN
          8       L   NaN
          9      GR   NaN
          10      O   NaN
C137      1       R   NaN
          2       R   NaN
          3       R   NaN

我正在尝试制作一个由连接器/引脚和颜色组成的新词典。因此,如果有意义的话,Index('F123',1)的值将等于R。

df1d = dict(zip(df1[index], df1['Color']))

是否可以将索引设置为键,而另一列作为值?上面的句法在语法上是错误的,但是在试图弄清楚这一点时是我的想法。

2 个答案:

答案 0 :(得分:3)

使用两个zipget_level_values

dict(zip(tuple(zip(df.index.get_level_values(0),df.index.get_level_values(1))),df.index.get_level_values(2)))
Out[738]: 
{('C137', 1): 'R',
 ('C137', 2): 'R',
 ('C137', 3): 'R',
 ('F123', 1): 'R',
 ('F123', 2): 'O',
 ('F123', 3): 'Y',
 ('F123', 4): 'GR',
 ('F123', 5): 'L',
 ('F123', 6): 'R',
 ('F123', 7): 'B',
 ('F123', 8): 'L',
 ('F123', 9): 'GR',
 ('F123', 10): 'O'}

如果颜色不在索引中,则为to_dict

df.Color.to_dict()
Out[740]: 
{('C137', 1): 'R',
 ('C137', 2): 'R',
 ('C137', 3): 'R',
 ('F123', 1): 'R',
 ('F123', 2): 'O',
 ('F123', 3): 'Y',
 ('F123', 4): 'GR',
 ('F123', 5): 'L',
 ('F123', 6): 'R',
 ('F123', 7): 'B',
 ('F123', 8): 'L',
 ('F123', 9): 'GR',
 ('F123', 10): 'O'}

答案 1 :(得分:1)

尚不清楚Color是否是您的索引级别。如果是这样,则可以使用reset_index来提升MultiIndex的序列,然后使用set_indexto_dict

d = df.reset_index().set_index(['Connector', 'Pin'])['Color'].to_dict()

print(d)

# {('C137', 1): 'R',
#  ('C137', 2): 'R',
#  ...
#  ('F123', 9): 'GR',
#  ('F123', 10): 'O'}