字典到两列 DataFrame

Dictionary to two columns DataFrame

我有一本大字典,结构简单:

dict_1 = {'A': {'x1': 0, 'x2': 1}, 'B': {'x1': 0, 'x2': 1, 'x3': 0}, 'C': {'x1': 1, 'x3': 1}}

我想将其转换为具有以下结构的 pandas 数据框

        "Var_1"  "Var_2"
  A       x_1      0  
  A       x_2      1
  B       x_1      0
  B       x_2      1
  B       x_3      0
  C       x_1      1
  C       x_3      1

我的第一次尝试是做类似

的事情
dict_1 = pd.DataFrame(dict_1)
dict_1 = dict_1.unstack().reset_index(level=1).set_axis(["Var_1","Var_2"], axis=1)
dict_1.dropna(inplace=True) 

然而,我意识到在整个过程中,许多np.NaN参与所有转换,使内存过度饱和,因此使整个转换非常耗时和资源。

有没有更简单快捷的方法来实现?

我建议使用列表理解来展平嵌套字典:

pd.DataFrame((k1, k2, v2) for k1, v1 in dict_1.items() for k2, v2 in v1.items())

   0   1  2
0  A  x1  0
1  A  x2  1
2  B  x1  0
3  B  x2  1
4  B  x3  0
5  C  x1  1
6  C  x3  1

你可以 stackrename:

df = pd.DataFrame(dict_1)
output = df.stack().reset_index(level=0).rename(columns={"level_0":"Var_1",0:"Var_2"})

>>> output
  Var_1  Var_2
A    x1    0.0
B    x1    0.0
C    x1    1.0
A    x2    1.0
B    x2    1.0
B    x3    0.0
C    x3    1.0

或者,melt

output = df.rename_axis("Var_1").reset_index().melt("Var_1",["A","B","C"],"index","Var_2").set_index("index")