聚合在包含数据帧的字典中

时间:2017-10-31 18:51:24

标签: python pandas dictionary

我有以下字典,其中包含数据框作为值,每个字典总是具有相同的列数(1),具有相同的标题

test = {'A': pd.DataFrame(np.random.randn(10), index=range(10),columns=['values']),
        'B': pd.DataFrame(np.random.randn(6), index=range(6),columns=['values']),
        'C': pd.DataFrame(np.random.randn(11), index=range(11),columns=['values'])}

由此,我想创建一个数据框,其中索引值是字典的键值(所以A,B,C),列是所有字典中当前索引值的并集(所以这种情况0,1,2,3 ... 10)。该数据帧的值将是相应的值'从每行对应的数据框,以及空白,NaN

有一种方便的方法吗?

2 个答案:

答案 0 :(得分:3)

IIUC,使用http.verify_mode = OpenSSL::SSL::VERIFY_PEER pd.concatkeys

unstack

更好的是,

pd.concat([test[i] for i in test], keys=test.keys()).unstack(1)['values']

输出:

pd.concat(test).unstack(1)['values']

答案 1 :(得分:0)

不要过于复杂化: 只需使用concat和transpose

pd.concat(test, axis=1).T

                0         1         2         3         4         5   \
A values -0.592711  0.266518 -0.774702  0.826701 -2.642054 -0.366401   
B values -0.709410 -0.463603  0.058129 -0.054475 -1.060643  0.081655   
C values  1.384366  0.662186 -1.467564  0.449142 -1.368751  1.629717   
                6         7         8         9         10  
A values  0.431069  0.761245 -1.125767  0.614622       NaN  
B values       NaN       NaN       NaN       NaN       NaN  
C values  0.988287 -1.508384  0.214971 -0.062339 -0.011547  

如果您正在处理系列而不是1列DataFrame,那么从...开始会更有意义。

test = {'A': pd.Series(np.random.randn(10), index=range(10)),
        'B': pd.Series(np.random.randn(6), index=range(6)),
        'C': pd.Series(np.random.randn(11), index=range(11))}

pd.concat(test,axis=1).T
         0         1         2         3         4         5         6   \
A -0.174565 -2.015950  0.051496 -0.433199  0.073010 -0.287708 -1.236115   
B  0.935434  0.228623  0.205645 -0.602561  1.860035 -0.921963       NaN   
C  0.944508 -1.296606 -0.079339  0.629038  0.314611 -0.429055 -0.911775   
         7         8         9         10  
A -0.704886 -0.369263 -0.390684       NaN  
B       NaN       NaN       NaN       NaN  
C  0.815078  0.061458  1.726053 -0.503471