将两个多级索引的pandas数据框相加

6
请问您能否帮忙将两个多层次的 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

基于这些数据框,想要查看...

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个回答

6
使用concat将两个数据框连接起来,使用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所示,请改用“sort_index”。

Mr. unutbu,您真是太棒了!非常感谢您! - E.K.

3

pandas中的追加操作被称为concat,并通过pd.concat函数执行。

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

不知道 df.sort_index() 这部分。谢谢! - E.K.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接