pandas - 在创建 MultiIndex 列时合并 Pandas DataFrames
问题描述
我有两个 DataFrame,如下所示:
import pandas as pd
dates = pd.Index(['2016-10-03', '2016-10-04', '2016-10-05'], name='Date')
close = pd.DataFrame( {'AAPL': [112.52, 113., 113.05],
'CSCO': [ 31.5, 31.35, 31.59 ],
'MSFT': [ 57.42, 57.24, 57.64 ] }, index = dates )
volume= pd.DataFrame( {'AAPL': [21701800, 29736800, 21453100] ,
'CSCO': [14070500, 18460400, 11808600] ,
'MSFT': [19189500, 20085900, 16726400] }, index = dates )
DataFrame 'close' 的输出如下所示:
AAPL CSCO MSFT
Date
2016-10-03 112.52 31.50 57.42
2016-10-04 113.00 31.35 57.24
2016-10-05 113.05 31.59 57.64
DataFrame 'volume' 的输出如下所示:
AAPL CSCO MSFT
Date
2016-10-03 21701800 14070500 19189500
2016-10-04 29736800 18460400 20085900
2016-10-05 21453100 11808600 16726400
我想将这两个 DataFrame 组合成一个带有 MultiIndex COLUMNS 的 DataFrame,这样它看起来像这样:
AAPL CSCO MSFT
Close Volume Close Volume Close Volume
Date
2016-10-03 112.52 21701800 31.50 14070500 57.42 19189500
2016-10-04 113.00 29736800 31.35 18460400 57.24 20085900
2016-10-05 113.05 21453100 31.59 11808600 57.64 16726400
谁能给我一个想法如何做到这一点?我一直在玩 pd.concat 和 pd.merge,但我不清楚如何让它与日期索引对齐并允许我为子索引提供名称('Close' 和 'Volume' ) 在列上。
解决方案
您可以使用keys
concat 的 kwarg:
In [11]: res = pd.concat([close, volume], axis=1, keys=["close", "volume"])
In [12]: res
Out[12]:
close volume
AAPL CSCO MSFT AAPL CSCO MSFT
Date
2016-10-03 112.52 31.50 57.42 21701800 14070500 19189500
2016-10-04 113.00 31.35 57.24 29736800 18460400 20085900
2016-10-05 113.05 31.59 57.64 21453100 11808600 16726400
稍作调整:
In [13]: res.swaplevel(0, 1, axis=1).sort_index(axis=1)
Out[13]:
AAPL CSCO MSFT
close volume close volume close volume
Date
2016-10-03 112.52 21701800 31.50 14070500 57.42 19189500
2016-10-04 113.00 29736800 31.35 18460400 57.24 20085900
2016-10-05 113.05 21453100 31.59 11808600 57.64 16726400
推荐阅读
- ios - 如何将背景颜色应用到 iPhone X 的不安全区域
- ios - 如何在 Swift 中编辑或更新文本字段中的文本?
- android - 折叠后调整我的 CollapsingToolbarLayout
- yocto - bitbake 在最简单的食谱上失败了
- angular - angular2-highcharts 向下钻取不起作用
- typescript - typescript 中类型断言的详细逻辑是什么?
- angular - 将 ngrx 与 Angular 一起使用
- acumatica - 如何附加 Acumatica DAC 属性 [PXEmailSource]
- java - Spring-Boot JPA-Hibernate Liquibase:如何填充 PostgreSQL DB 考虑到实体的变化?
- java - Java JTable 在编辑时扩展列宽。没有键盘记录