包含pandas数据帧的数组和矩阵的字典

时间:2017-04-26 12:41:37

标签: python pandas dictionary dataframe

我有一个字典a,如下所示:

a = {}
a['first_variable']=np.array([1,2,3,4,5])
a['second_variable']=np.array([[1,2],[3,4],[5,6],[7,8],[9,10]])

正如您所看到的,某些键包含一个数组,另一个包含矩阵......

鉴于这本词典,我想创建一个看起来像这样的数据框

a_dataframe = pd.DataFrame(columns=['first_variable','second_variable_col1','second_variable_col2'])
a_dataframe['first_variable']=np.array([1,2,3,4,5])
a_dataframe['second_variable_col1']=np.array([1,3,5,7,9])
a_dataframe['second_variable_col2']=np.array([2,4,6,8,10])

这应该以自动方式完成...即从字典键中取名字,如果是矩阵,则添加col1,col2等......

你能帮帮我吗? 感谢

2 个答案:

答案 0 :(得分:2)

您可以将concat与列表理解和DataFrame构造函数一起使用,最后在列columns中创建MultiIndex

df = pd.concat([pd.DataFrame(a[x]) for x in a], keys=a.keys(), axis=1)
df.columns = ['{}{}'.format(x[0], x[1]) for x in df.columns]
print (df)
   second_variable0  second_variable1  first_variable0
0                 1                 2                1
1                 3                 4                2
2                 5                 6                3
3                 7                 8                4
4                 9                10                5

答案 1 :(得分:1)

import pandas as pd
import numpy as np
a = {}
a['first_variable']=np.array([1,2,3,4,5])
a['second_variable']=np.array([[1,2],[3,4],[5,6],[7,8],[9,10]])

#Use a double list comprehension to construct both data and column names in one go.
df = pd.DataFrame({'{}_col{}'.format(k,i):e for k,v in a.items() 
                      for i,e in enumerate(np.asarray(v).T.reshape(-1,5))})
print(df)
   first_variable_col0  second_variable_col0  second_variable_col1
0                    1                     1                     2
1                    2                     3                     4
2                    3                     5                     6
3                    4                     7                     8
4                    5                     9                    10