【问题标题】:Concating multiindex dataframes连接多索引数据帧
【发布时间】:2017-09-04 23:47:17
【问题描述】:

我有一个多索引数据框,外层索引由股票名称组成,内层索引由日期组成。

                     Open        High        Low         Close
AAPL    2010-01-04  213.429998  214.499996  212.380001  214.009998  
        2010-01-08  210.299994  212.000006  209.060005  211.980005

OPK     2010-01-04  213.429998  214.499996  212.380001  214.009998  
        2010-01-08  210.299994  212.000006  209.060005  211.980005

我有一个新数据框,其中一些日期未包含在原始数据框中,我想附加它们。

                       Open          High        Low         Close

AAPL    2010-01-09  219.429998  219.499996  212.380001  214.009998  
        2010-01-10  219.299994  219.000006  209.060005  211.980005

OPK     2010-01-09  219.429998  219.499996  212.380001  214.009998  
        2010-01-10  219.299994  219.000006  209.060005  211.980005

所以我正在寻找的输出是

                      Open       High        Low         Close
AAPL    2010-01-04  213.429998  214.499996  212.380001  214.009998  
        2010-01-08  210.299994  212.000006  209.060005  211.980005
        2010-01-09  219.429998  219.499996  212.380001  214.009998  
        2010-01-10  219.299994  219.000006  209.060005  211.980005

        2010-01-04  213.429998  214.499996  212.380001  214.009998  
        2010-01-08  210.299994  212.000006  209.060005  211.980005
OPK     2010-01-09  219.429998  219.499996  212.380001  214.009998  
        2010-01-10  219.299994  219.000006  209.060005  211.980005

我尝试了这些变体

    pd.concat([stocks_df, df])
    pd.concat([stocks_df, df], levels = [stocks_df.index] )

但似乎无法找到解决方案。

【问题讨论】:

  • 据我所知,第一个变体应该可以工作。

标签: pandas concatenation multi-index


【解决方案1】:

我认为你需要concatsort_index

df = pd.concat([stocks_df, df]).sort_index()
print (df)
                       Open        High         Low       Close
AAPL 2010-01-04  213.429998  214.499996  212.380001  214.009998
     2010-01-08  210.299994  212.000006  209.060005  211.980005
     2010-01-09  219.429998  219.499996  212.380001  214.009998
     2010-01-10  219.299994  219.000006  209.060005  211.980005
OPK  2010-01-04  213.429998  214.499996  212.380001  214.009998
     2010-01-08  210.299994  212.000006  209.060005  211.980005
     2010-01-09  219.429998  219.499996  212.380001  214.009998
     2010-01-10  219.299994  219.000006  209.060005  211.980005

【讨论】:

  • 这似乎有效。然而,奇怪的是,列的顺序又发生了变化,就像在新的 df 中混淆了一样。我得到Index(['15_Avg_Vol', '20_Avg_Vol', '30_Avg_Vol', '5days', '7days', '7days_10daysAvg', '9_Avg_Vol', 'Adj Close', 'Close', 'Daily_Change', 'High', 'Low', 'Open', 'Volume', 'changed' dtype='object') ` 我正在连接的较小的df 的列(仅在上面的OP 中的列)比较大的列少。但是,它们都以['Open', 'High', 'Low', 'Close', 'Volume'] 开头,所以不确定为什么要更改顺序。
猜你喜欢
  • 2021-01-12
  • 2020-10-21
  • 1970-01-01
  • 2019-11-02
  • 2013-12-05
  • 2021-10-15
  • 2018-02-26
  • 2017-03-05
  • 1970-01-01
相关资源
最近更新 更多