【发布时间】:2018-12-02 03:21:15
【问题描述】:
我想合并/连接/... 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 中的任何内容都不感兴趣(即,其他日期或代码不相关)。
【问题讨论】:
-
你试过什么没用?
-
我实际上什至不知道从哪里开始。我的第一个方法是合并,但据我所知,它使用一个唯一标识符。
-
我想到的另一种方法是蛮力方法。通过运行一个循环,在第二个数据帧中搜索正确的值,但这听起来不是很pythonic。