字典到两列 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
你可以 stack
和 rename
:
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")
我有一本大字典,结构简单:
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
你可以 stack
和 rename
:
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")