将嵌套字典转换为数据框并与另一个数据框联接

时间:2020-01-15 13:24:28

标签: python pandas dataframe

我有一本这样的字典:

my_dict = {'Red': {'Red': {'A': 91, 'B': 279, 'C': 296, 'D': 516}, 'Amber': {'A': 229, 'B': 273, 'C': 273, 'D': 529}}, 'Amber': {'Red': {'A': 191, 'B': 323, 'C': 329, 'D': 634},  'Green': {'A': 137, 'B': 212, 'C': 222, 'D': 430}}, 'Green': {'Red': {'A': 50, 'B': 254, 'C': 299, 'D': 463}, 'Amber': {'A': 84, 'B': 235, 'C': 244, 'D': 364}}}

但更大。

我有一个数据框df1,看起来像下面,但更大(数百行),列数更多(10s)

C1    C2      dim1 unique_no
Amber Red     F     1
Red   Green   T     2    
Green Red     T     3 
Red   Amber   F     4 
Red   Red     T     5 
Green Amber   T     6

我喜欢根据my_dict中的值在d​​f1中创建A,B,C和D列

我认为将my_dict转换为数据框并将其合并到数据框将是实现此目标的一种方法

我尝试使用

将my_dict转换为数据框
df2 = pd.concat({k: pd.DataFrame(v).T for k, v in my_dict.items()}, axis=0)

df2出现如下:

              A    B    C    D
Amber Red    191  323  329  634
      Green  137  212  222  430
Green Red     50  254  299  463
      Amber   84  235  244  364
Red   Red     91  279  296  516
      Amber  229  273  273  529

我希望df2像这样:

  C1    C2    A    B    C    D
Amber Red    191  323  329  634
Amber Green  137  212  222  430
Green Red     50  254  299  463
Green Amber   84  235  244  364
Red   Red     91  279  296  516
Red   Amber  229  273  273  529

所以我可以将df1和df2一起加入

1 个答案:

答案 0 :(得分:1)

使用reset_index():

一种方法是使用reset_index()并命名两个新列“ C1”和“ C2”

示例:

df2.index.rename(['C1', 'C2'], inplace=True) # rename the index of df2 'C1' and 'C2'
df2 = df2.reset_index() # reset index

然后您可以加入df1和df2。

希望这会有所帮助。