目前我有两个看起来像这样的数据框:
FSample
GMSample
我想要的是理想情况下的东西:
我尝试做类似
的事情result = pd.concat([FSample,GMSample],axis=1)
result
然后我试图像这样使用合并命令
result = pd.merge(FSample,GMSample,how='inner',on='Date')
result
由此我在'日期'
上得到了一个KeyError所以我觉得我既缺少理解我应该如何组合这些数据帧(即多索引?)和语法来正确地做到这一点。
答案 0 :(得分:1)
你得到一个关键错误,因为Date是一个索引,而" on"合并中的关键字需要一列。或者,您可以从索引中删除Symbol,然后按日期索引连接数据帧。
FSample.reset_index("Symbol").join(GMSample.reset_index("Symbol"), lsuffix="_x", rsuffix="_y")
答案 1 :(得分:1)
在pandas中使用MultiIndex通常需要您不断设置/重置索引。在这种情况下,这可能是最容易做的事情,因为pd.merge
不会立即支持在MultiIndex的特定级别上进行合并。
df_f = pd.DataFrame(
data = {
'Symbol': ['F'] * 5,
'Date': pd.to_datetime(['2012-01-03', '2012-01-04', '2012-01-05', '2012-01-06', '2012-01-09']),
'Close': [11.13, 11.30, 11.59, 11.71, 11.80],
},
).set_index(['Symbol', 'Date']).sort_index()
df_gm = pd.DataFrame(
data = {
'Symbol': ['GM'] * 5,
'Date': pd.to_datetime(['2012-01-03', '2012-01-04', '2012-01-05', '2012-01-06', '2012-01-09']),
'Close': [21.05, 21.15, 22.17, 22.92, 22.84],
},
).set_index(['Symbol', 'Date']).sort_index()
pd.merge(df_f.reset_index(level='Date'),
df_gm.reset_index(level='Date'),
how='inner',
on='Date',
suffixes=('_F', '_GM')
).set_index('Date')
结果:
Close_F Close_GM
Date
2012-01-03 11.13 21.05
2012-01-04 11.30 21.15
2012-01-05 11.59 22.17
2012-01-06 11.71 22.92
2012-01-09 11.80 22.84