如何将多源带日期索引的Pandas DataFrame合并为多级索引DataFrame
解决方案:合并为多级索引DataFrame
没问题,这其实用Pandas的几个简单操作就能轻松实现,我给你两种常用的方法,你可以根据自己的习惯选:
方法1:用pd.concat直接指定数据源索引(最简洁)
首先我们先模拟你的两个数据源DataFrame(你可以直接替换成自己的真实数据):
import pandas as pd # 模拟Source 1数据 df1 = pd.DataFrame( {'open': ['xxx', 'xxx', 'xxx'], 'high': ['xxx', 'xxx', 'xxx'], 'low': ['xxx', 'xxx', 'xxx'], 'close': ['xxx', 'xxx', 'xxx']}, index=pd.to_datetime(['2018-04-04 20:00:00', '2018-04-04 21:00:00', '2018-04-04 22:00:00']) ) # 模拟Source 2数据 df2 = pd.DataFrame( {'open': ['xxx', 'xxx', 'xxx'], 'high': ['xxx', 'xxx', 'xxx'], 'low': ['xxx', 'xxx', 'xxx'], 'close': ['xxx', 'xxx', 'xxx']}, index=pd.to_datetime(['2018-04-04 20:00:00', '2018-04-04 21:00:00', '2018-04-04 22:00:00']) )
接下来用pd.concat的keys参数给每个数据源打上标签,再调整索引层级:
# 合并并添加数据源索引 combined = pd.concat([df1, df2], keys=['source1', 'source2'], axis=0) # 交换索引层级,让date成为第一级,数据源成为第二级,然后排序 combined = combined.swaplevel(0, 1).sort_index()
这样得到的结果就是你想要的多级索引结构:第一级是date,第二级是source1/source2,每一行对应一个时间点下某个数据源的行情数据。
方法2:手动添加数据源列再设置多级索引(更直观)
如果你觉得第一种方法有点绕,也可以先给每个DataFrame添加source列,再设置多级索引:
# 给每个DataFrame添加source标识 df1['source'] = 'source1' df2['source'] = 'source2' # 合并两个DataFrame combined = pd.concat([df1, df2], axis=0) # 设置date和source为多级索引,并排序 combined = combined.set_index(['date', 'source']).sort_index()
两种方法最终的效果完全一致,你可以根据自己的习惯选择。
内容的提问来源于stack exchange,提问作者Ludo
相关产品推荐
相关产品推荐

