附加两个多索引的pandas数据帧

时间:2015-07-30 17:44:42

标签: python join pandas multi-index

你能帮忙添加两个多索引的pandas数据帧吗?试图将df_future附加到df_current。 COMPANY和DATE是索引。

df_current

                           VALUE
COMPANY     DATE            
            7/27/2015       1
A           7/28/2015       2
            7/29/2015       3
            7/30/2015       4
            7/27/2015       11
B           7/28/2015       12
            7/29/2015       13
            7/30/2015       14

df_future

                            VALUE
COMPANY     DATE            
A           8/1/2015        5
            8/2/2015        6
B           8/1/2015        15
            8/2/2015        16

基于这些dfs,想看看..

df_current_and_future

                            VALUE
COMPANY     DATE            
            7/27/2015       1
            7/28/2015       2
A           7/29/2015       3
            7/30/2015       4
            8/1/2015        5
            8/2/2015        6
            7/27/2015       11
            7/28/2015       12
B           7/29/2015       13
            7/30/2015       14
            8/1/2015        15
            8/2/2015        16

2 个答案:

答案 0 :(得分:6)

使用concat连接两个DataFrame,并sort_index重新排序第一个索引级别:

In [167]: pd.concat([df_current, df_future]).sort_index()
Out[167]: 
                   VALUE
COMPANY DATE            
A       7/27/2015      1
        7/27/2015     11
        7/28/2015      2
        7/29/2015      3
        7/30/2015      4
        8/1/2015       5
        8/2/2015       6
B       7/28/2015     12
        7/29/2015     13
        7/30/2015     14
        8/1/2015      15
        8/2/2015      16

注意:我的原始答案使用sortlevel,现已弃用。如firelynx shows,请改用sort_index

答案 1 :(得分:3)

在pandas中追加称为concat。并使用the pd.concat function.

完成

无论您是否有多索引

concat功能都有效
df = pd.concat([df_current, future])

                   VALUE
COMPANY DATE            
A       7/27/2015      1
        7/28/2015      2
        7/29/2015      3
        7/30/2015      4
        7/27/2015     11
B       7/28/2015     12
        7/29/2015     13
        7/30/2015     14
A       8/1/2015       5
        8/2/2015       6
B       8/1/2015      15
        8/2/2015      16

如果排序是个问题,请使用:

df.sort_index()

                   VALUE
COMPANY DATE            
A       7/27/2015      1
        7/27/2015     11
        7/28/2015      2
        7/29/2015      3
        7/30/2015      4
        8/1/2015       5
        8/2/2015       6
B       7/28/2015     12
        7/29/2015     13
        7/30/2015     14
        8/1/2015      15
        8/2/2015      16