df1
Date APA AR BP-GB CDEV ... WLL WPX XEC XOM CL00-USA
0 2018-01-01 42.22 19.00 5.227 19.80 ... 26.48 14.07 122.01 83.64 60.42
1 2018-01-02 44.30 19.78 5.175 20.00 ... 27.37 14.31 125.51 85.03 60.37
2 2018-01-03 45.33 19.78 5.242 20.33 ... 27.99 14.39 126.20 86.70 61.63
3 2018-01-04 46.84 19.80 5.300 20.37 ... 28.11 14.44 128.66 86.82 62.01
4 2018-01-05 46.39 19.44 5.296 20.12 ... 27.79 14.24 127.82 86.75 61.44
df2
Date Ticker Event_Type Event_Description Price add
0 2018-11-19 XEC M&A REN 88.03 1
1 2018-03-28 CXO M&A RSPP 143.25 1
2 2018-08-14 FANG M&A EGN 133.75 1
3 2019-05-09 OXY M&A APC 56.33 1
4 2019-08-26 PDCE M&A SRCI 29.65 1
我的目标是通过使用df2 ['Ticker']和df2 ['Date']从df1中提取值来更新df2。['add'] ...例如,df2中的第一行是XEC 2018-11-19 ...代码需要首先查看df1 [XEC],然后在df [Date]中拉出与2018-11-19行匹配的值
我的尝试是:
df_Events['add'] = df_Prices.loc[[df_Prices['Date']==df_Events['Date']],[df_Prices.columns==df_Events['Ticker']]]
答案 0 :(得分:0)
尝试:
df2 = df2.merge(df1.melt(value_vars=df1.columns.tolist()[1:], id_vars='date', value_name="add", var_name='Ticker').reset_index(), how='left')`
这应将df1 Tickers
列更改为单个列,然后将该列中的值合并为df2。
答案 1 :(得分:0)
另一种方法可能如下(我已经开始研究它,所以即使您已经接受了答案,我也要放在这里)
首先在两个数据框中将日期转换为datetime对象,并在第一个数据集(下面的代码)中将其设置为ony
df1['Date']=pd.to_datetime(df1['Date'])
df1.set_index('Date',inplace=True)
df2['Date']=pd.to_datetime(df2['Date'])
然后使用apply获取每个列的值。
df2['add']=df2.apply(lambda x: df1.loc[(x['Date']),(x['Ticker'])], axis=1)
仅当两个数据框中都存在所有股票的日期和值时,此方法才起作用(因此将抛出为“ KeyError”