我有2个数据框,我想将第二个数据框添加到第一个数据框,这样我就可以得到下面的第三个数据框:
第一个数据帧:
dict = [{'name': 'aapl', 'date': '2016-11-29'},
{'name': 'msft', 'date': '2016-11-29'},
{'name': 'ge', 'date': '2016-11-29'},
{'name': 'jpm', 'date': '2016-11-29'},
{'name': 'aapl', 'date': '2016-11-30'},
{'name': 'msft', 'date': '2016-11-30'},
{'name': 'ge', 'date': '2016-11-30'},
{'name': 'jpm', 'date': '2016-11-30'}]
df1 = pd.DataFrame(dict)
第二个数据帧:
dict = [{'2016-11-29': 'x1', '2016-11-30': 'y1'},
{'2016-11-29': 'x2','2016-11-30': 'y2'},
{'2016-11-29': 'x3','2016-11-30': 'y3'},
{'2016-11-29': 'x4','2016-11-30': 'y4'}]
df2 = pd.DataFrame(dict, index=['aapl', 'msft','ge','jpm'])
第三个数据框(目标):
dict = [{'name': 'aapl', 'date': '2016-11-29', 'df2': 'x1'},
{'name': 'msft', 'date': '2016-11-29', 'df2': 'x2'},
{'name': 'ge', 'date': '2016-11-29', 'df2': 'x3'},
{'name': 'jpm', 'date': '2016-11-29', 'df2': 'x4'},
{'name': 'aapl', 'date': '2016-11-30', 'df2': 'y1'},
{'name': 'msft', 'date': '2016-11-30', 'df2': 'y2'},
{'name': 'ge', 'date': '2016-11-30', 'df2': 'y3'},
{'name': 'jpm', 'date': '2016-11-30', 'df2': 'y4'}]
df3 = pd.DataFrame(dict)
有一种简单的方法吗?
答案 0 :(得分:2)
在melt
之前使用merge
newdf2=df2.reset_index().melt('index').rename(columns={'index':'name','variable':'date'})
df3=df1.merge(newdf2,how='left')
df3
date name value
0 2016-11-29 aapl x1
1 2016-11-29 msft x2
2 2016-11-29 ge x3
3 2016-11-29 jpm x4
4 2016-11-30 aapl y1
5 2016-11-30 msft y2
6 2016-11-30 ge y3
7 2016-11-30 jpm y4
答案 1 :(得分:2)
new_df = df1.merge(df2.unstack().to_frame('df2'), left_on=['date','name'], right_index=True)
>>>new_df
date name df2
0 2016-11-29 aapl x1
1 2016-11-29 msft x2
2 2016-11-29 ge x3
3 2016-11-29 jpm x4
4 2016-11-30 aapl y1
5 2016-11-30 msft y2
6 2016-11-30 ge y3
7 2016-11-30 jpm y4
之所以有效,是因为当您卸货df2
时:
df2.unstack().to_frame('df2')
df2
2016-11-29 aapl x1
msft x2
ge x3
jpm x4
2016-11-30 aapl y1
msft y2
ge y3
jpm y4
该索引可在date
的{{1}}和name
列上合并