连接多索引数据帧
Posted
技术标签:
【中文标题】连接多索引数据帧【英文标题】: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] )
但似乎无法找到解决方案。
【问题讨论】:
据我所知,第一个变体应该可以工作。 【参考方案1】:我认为你需要concat
和sort_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']
开头,所以不确定为什么要更改顺序。以上是关于连接多索引数据帧的主要内容,如果未能解决你的问题,请参考以下文章