将熊猫数据框列的组合有效地转换为键值对

时间:2020-07-20 12:01:50

标签: python pandas

我有一个数据框,希望将其转换为键值对: 我的数据框:

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}
}

1 个答案:

答案 0 :(得分:3)

使用DataFrame.set_indexInstitution编制索引,选择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}}
相关问题