2017-07-31 133 views
2

我正在尝试使用Python学习数据科学,并遇到以下问题。Python从字典键中创建新列

假设我们有如下形式

enter image description here

和形式的字典的数据帧

Regions = {“Central Asia”: [“Afghanistan”], 
“Europe”: [“Albania”, “Andorra”], 
“Africa”: [“Algeria”], 
“America”: [“American Samoa”]} 

我想从键创建的数据帧中的新列这本字典是这样的条目,如下:

enter image description here

有没有一种很好的方法在Python中做到这一点?

感谢您的帮助!

回答

6

您可以使用mapdict其中被交换键与值:

d = {k: oldk for oldk, oldv in Regions.items() for k in oldv} 
print (d) 
{'Andorra': 'Europe', 'Afghanistan': 'Central Asia', 
'Algeria': 'Africa', 'American Samoa': 'America', 'Albania': 'Europe'} 

df['Region'] = df['country'].map(d) 
print (df) 
      country  Region 
0  Afghanistan Central Asia 
1   Albania  Europe 
2   Algeria  Africa 
3 American Samoa  America 
4   Andorra  Europe 
4

一个一个衬垫使用DataFrame.from_dictdf.stack()(感谢MaxU!):

In [8]: pd.DataFrame.from_dict(Regions, orient='index').stack()\ 
        .reset_index(level=0)\ 
        .rename(columns={'level_0':'Region',0:'country'})\ 
        .reset_index(drop=True) 
Out[8]: 
     Region   country 
0  Europe   Albania 
1  Europe   Andorra 
2  Africa   Algeria 
3 Central Asia  Afghanistan 
4  America American Samoa 
+1

怎么样:'pd.DataFrame .set()).from_dict(Regions,orient ='index')。stack()。reset_index(level = 0).rename(columns = {'level_0':'Region',0:'country'})。reset_index(drop = True) '? – MaxU

+0

@MaxU谢谢:)绝对更好。 –