2017-07-18 82 views
0

我有一个包含以下嵌套字典各阶层,和这些内部的一组键值对...如何将数据帧大熊猫列映射到一个嵌套的字典

['Class1': ['Param1': '0', 'Param2': '1', 'Param3': '2'], 'Class2': ['Param1': '4', 'Param2': '5', 'Param3': '6']] 

我要地图嵌套词典在一个数据帧大熊猫看起来像下面的一个新列...

Class,Param 
Class1,Param1 
Class2,Param1 
Class1,Param2 
Class2,Param2 
Class1,Param3 
Class2,Param3 

我不知道这是否可以使用在熊猫的地图功能来完成,我可以做到使用一个简单的字典

以下

个DF [“NEW_COLUMN”] = DF [“帕拉姆”。图(字典)

但我不知道如何对嵌套的字典中的列映射...

回答

2

我想你需要创建Series通过DataFrame构造与unstackrename_axis,创建Series名称,然后join

d = {'Class1': {'Param1': '0', 'Param2': '1', 'Param3': '2'}, 
    'Class2': {'Param1': '4', 'Param2': '5', 'Param3': '6'}} 

s = pd.DataFrame(d).unstack().rename_axis(('Class','Param')).rename('new_column') 
print (s) 
Class Param 
Class1 Param1 0 
     Param2 1 
     Param3 2 
Class2 Param1 4 
     Param2 5 
     Param3 6 
Name: new_column, dtype: object 

df = df.join(s, on=['Class','Param']) 
print (df) 
    Class Param new_column 
0 Class1 Param1   0 
1 Class2 Param1   4 
2 Class1 Param2   1 
3 Class2 Param2   5 
4 Class1 Param3   2 
5 Class2 Param3   6 

d = {'Class1': {'Param1': '0'}, 
    'Class2': {'Param1': '4', 'Param2': '5', 'Param3': '6'}} 

s = pd.DataFrame(d).unstack().rename_axis(('Class','Param')).rename('new_column') 
print (s) 
Class Param 
Class1 Param1  0 
     Param2 NaN 
     Param3 NaN 
Class2 Param1  4 
     Param2  5 
     Param3  6 
Name: new_column, dtype: object 

df = df.join(s, on=['Class','Param']) 
print (df) 
    Class Param new_column 
0 Class1 Param1   0 
1 Class2 Param1   4 
2 Class1 Param2  NaN 
3 Class2 Param2   5 
4 Class1 Param3  NaN 
5 Class2 Param3   6 
+0

好的,谢谢你 - 我认为没有办法直接使用带有map函数的嵌套字典吗? – Shaw

+0

Soory,我错了。您只能通过一个键映射,而不能通过函数['map'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.map.html)通过2个键来映射。 – jezrael

+0

感谢您的确认......不幸的是,在我的数据集中,我无法使用连接,因为我的新数据框中的索引长度与我原始数据框的长度不匹配。我不能在这里发布完整的数据集,因为它有超过500,000行。 – Shaw