如何将Pandas数据帧列映射到嵌套字典

时间:2017-07-18 08:21:13

标签: python pandas dictionary

我有以下嵌套字典,其中包含各种类,其中包含一组键值对...

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

我想将嵌套字典映射到pandas数据框中的新列,如下所示......

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

我不确定是否可以使用pandas中的map函数完成此操作,我可以使用简单的dict执行以下操作

df [' new_column'] = df [' Param']。map(dict)

但我不确定如何将列映射到嵌套字典...

1 个答案:

答案 0 :(得分:2)

我认为您需要Series构造函数使用unstackrename_axis创建DataFrame,创建名称Series,然后join:< / p>

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