基于索引和日期合并熊猫数据帧



我想合并/连接/。。。2个数据帧,这样我就得到了下面的第三个数据帧(对于第一个股票代码/日期组合,这是第一个数据帧+var2(:

第一个数据帧:

dict1 = [{'date': '2016-11-29','var1': 'x1'},
{ 'date': '2016-11-29','var1': 'x2'},
{ 'date': '2016-11-29','var1': 'x3'},
{'date': '2016-11-29','var1': 'x4'},
{'date': '2016-11-30','var1': 'x5'},
{'date': '2016-11-30','var1': 'x6'}]
df1 = pd.DataFrame(dict1, index=['ge','jpm','fb', 'msft','ge','jpm'])

第二个数据帧:

dict2 = [{'date': '2016-11-29','var2': 'y1'},
{ 'date': '2016-11-29','var2': 'y2'},
{ 'date': '2016-11-29','var2': 'y3'},
{'date': '2016-11-29','var2': 'y4'},
{'date': '2016-11-30','var2': 'y5'},
{'date': '2016-11-30','var2': 'y6'},
{'date': '2016-11-30','var2': 'y7'},
{'date': '2016-11-30','var2': 'y8'}]
df2 = pd.DataFrame(dict2, index=['aapl', 'msft','ge','jpm','aapl', 'msft','ge','jpm'])

第三个(目标(数据帧:

dict3 = [{'date': '2016-11-29','var1': 'x1','var2': 'y3'},
{ 'date': '2016-11-29','var1': 'x2','var2': 'y4'},
{ 'date': '2016-11-29','var1': 'x3','var2': 'NaN'},
{'date': '2016-11-29','var1': 'x4','var2': 'y2'},
{'date': '2016-11-30','var1': 'x5','var2': 'y7'},
{'date': '2016-11-30','var1': 'x6','var2': 'y8'}]
df3 = pd.DataFrame(dict3, index=['ge','jpm','fb', 'msft','ge','jpm'])

请注意,数据帧没有对齐,因此合并应确保索引和日期相同。也就是说,索引和日期是唯一的标识符。例如,在第三个数据帧中,您可以看到第一行需要日期为"2016-11-29"的股票代码"ge"。此外,如前所述,我只需要df1中的数据,df2中除此之外的任何数据都不感兴趣(即,其他日期或股票代码都不相关(。

您可以重置索引,合并索引列和日期列,并恢复索引:

df1.reset_index().merge(df2.reset_index(), 
on=['index', 'date'], how='left')
.set_index('index')
#             date var1 var2
#index                      
#ge     2016-11-29   x1   y3
#jpm    2016-11-29   x2   y4
#fb     2016-11-29   x3  NaN
#msft   2016-11-29   x4   y2
#ge     2016-11-30   x5   y7
#jpm    2016-11-30   x6   y8

最新更新