我有一个数据框,希望将其转换为键值对: 我的数据框:
Institution Funding
ETH WTO
Harbin WTO, CASA, WHO
SJSU NASA, WTO
JAIST NASA
如果我在“资金”列中只有一个条目。我能够通过这样的内置功能来实现它:
dict(zip(df['Funding'], df['Institution']))
但是,情况更复杂(具有多个条目以及逗号和空格)。这行不通。 该怎么办? (同样,理想情况下,我想使用“资金”列中的所有不同条目。有关详细信息,请参见上方的数据框和下方的预期输出)
预期输出:
{'ETH': {'WTO':True, 'CASA': False, 'WHO': False, 'NASA': False},
'Harbin': {'WTO':True, 'CASA': True, 'WHO': True, 'NASA': False},
'SJSU': {'WTO':True, 'CASA': False, 'WHO': False, 'NASA': True},
'JAIST':{'WTO':False, 'CASA': False, 'WHO': False, 'NASA': True}
}
答案 0 :(得分:3)
使用DataFrame.set_index
为Institution
编制索引,选择Funding
,通过Series.str.get_dummies
创建虚拟列,转换为布尔值,然后由DataFrame.to_dict
转换为嵌套字典:
d = (df.set_index('Institution')['Funding']
.str.get_dummies(', ')
.astype(bool)
.to_dict('index'))
print (d)
{'ETH': {'CASA': False, 'NASA': False, 'WHO': False, 'WTO': True},
'Harbin': {'CASA': True, 'NASA': False, 'WHO': True, 'WTO': True},
'SJSU': {'CASA': False, 'NASA': True, 'WHO': False, 'WTO': True},
'JAIST': {'CASA': False, 'NASA': True, 'WHO': False, 'WTO': False}}