将字典转换为具有更高级别的数据框

时间:2018-08-04 02:09:53

标签: python dictionary dataframe

我有一个字典,它的两个元素是两个具有相同索引和列名的数据帧。像下面的代码:

my_dict = {}
my_dict['df1'] = pd.DataFrame(np.arange(6).reshape(3,2),index = ['r1','r2','r3'],columns=['c1', 'c2'])
my_dict['df2'] = pd.DataFrame((np.arange(6)+10).reshape(3,2),index = ['r1','r2','r3'],columns=['c1', 'c2'])

my_dict['df1'] 
Out[1]: 
    c1  c2
r1   0   1
r2   2   3
r3   4   5

my_dict['df2']
Out[2]: 
    c1  c2
r1  10  11
r2  12  13
r3  14  15

如何将dict转换为一个数据框。索引将保持与原始索引相同,但我为列提供了一个更高级别,如下所示:

    df1     df2
    c1  c2  c1  c2
r1   0   1  10  11
r2   2   3  12  13
r3   4   5  14  15

2 个答案:

答案 0 :(得分:0)

您尝试过吗:

df1=my_dict['df1']
df2=my_dict['df2']
df1.columns = [['df1']*df1.shape[1],df1.columns]
df2.columns = [['df2']*df2.shape[1],df2.columns]
df1.join(df2)

答案 1 :(得分:0)

可能您需要与other answer类似的东西。正如其他答案中的讨论所指出的,仅使用pd.concat(my_dict.values(), axis=1, keys=my_dict.keys())不能保证.values().keys()的顺序相同。

因此,可以使用k, values = zip(*my_dict.items())保留订单并将其与pd.concat一起使用:

k, values = zip(*my_dict.items())
new_df = pd.concat(values, keys = k, axis=1)