我有以下多索引数据框。
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']))
是否可以将索引设置为键,而另一列作为值?上面的句法在语法上是错误的,但是在试图弄清楚这一点时是我的想法。
答案 0 :(得分:3)
使用两个zip
和get_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_index
和to_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'}