pandas:合并多个数据帧以获得所需的MultiIndex

时间:2016-01-16 11:52:05

标签: python pandas

我已经定义了3个简单的数据框如下:

dates = [dt.datetime(2015,1,1),dt.datetime(2015,1,2)]
column_names = ['A','B']
data_open = pd.DataFrame([[1,2],[3,4]], index=dates, columns=column_names)
data_close = pd.DataFrame([[5,6],[7,8]], index=dates, columns=column_names)
data_volume = pd.DataFrame([[9,10],[11,12]], index=dates, columns=column_names)

打印时,它们如下所示:

print data_open
            A  B
2015-01-01  1  2
2015-01-02  3  4

print data_close
            A  B
2015-01-01  5  6
2015-01-02  7  8

print data_volume
             A   B
2015-01-01   9  10
2015-01-02  11  12

我正在寻找的方法是将所有三个合并在一起并获得一个带有MultiIndex的单个DataFrame,如下所示:

Desired data frame structure

我是Pandas的新手,我查看了文档,找不到我要找的东西。

1 个答案:

答案 0 :(得分:2)

您可以使用concat指定keys,然后指定swaplevelsort_index

df = pd.concat([data_open, data_close, data_volume], keys=['open', 'close', 'volume'])
df = df.swaplevel(0,1).sort_index()

print df

                    A   B
2015-01-01 close    5   6
           open     1   2
           volume   9  10
2015-01-02 close    7   8
           open     3   4
           volume  11  12

如果您想按列A排序:

df = df.groupby(level=0).apply(lambda x: x.sort_values('A'))
df.index = df.index.droplevel(0)
print df

                    A   B
2015-01-01 open     1   2
           close    5   6
           volume   9  10
2015-01-02 open     3   4
           close    7   8
           volume  11  12