我想合并/连接/ ... 2个数据框,以便获得下面的第3个数据框(这是第1个数据行/日期组合的第2个数据帧的第1个数据帧+ 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'])
第3个(目标)数据帧:
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'])
请注意,数据框未对齐,因此合并应确保索引和日期相同。即,索引和日期是唯一的标识符。例如,在第3个数据框中,您可以看到第1行需要从日期“ 2016-11-29”开始的代码“ ge”。而且,如上所述,我只需要df1中的数据,而df2中的任何内容都不是有趣的(即,其他日期或行情自动收录器不相关)。
答案 0 :(得分:2)
您可以重置索引,在索引列和日期列上合并,然后恢复索引:
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