Python 使用行/列引用从另一个数据帧中的两个列值获取数据
df1 df2 我的目标是通过使用df2['Ticker']和df2['Date']从df1中提取值来更新df2['add']。。。例如,df2的第一行是2018年11月19日的XEC。。。代码需要首先查看df1[XEC],然后提取与df[Date]中2018-11-19行匹配的值 我的尝试是:Python 使用行/列引用从另一个数据帧中的两个列值获取数据,python,dataframe,Python,Dataframe,df1 df2 我的目标是通过使用df2['Ticker']和df2['Date']从df1中提取值来更新df2['add']。。。例如,df2的第一行是2018年11月19日的XEC。。。代码需要首先查看df1[XEC],然后提取与df[Date]中2018-11-19行匹配的值 我的尝试是: Date Ticker Event_Type Event_Description Price add 0 2018-11-19 XEC M&A
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
尝试:
这应该会将df1
Tickers
列更改为单个列,然后将该列中的值合并为df2。另一种方法可能如下所示(我已经开始研究它,所以即使您已经接受了答案,我仍将其放在这里)
首先将两个数据帧中的日期转换为datetime对象,并在第一个数据帧中将其设置为索引ony(代码如下)
然后使用apply获取每个列的值
df1['Date']=pd.to_datetime(df1['Date'])
df1.set_index('Date',inplace=True)
df2['Date']=pd.to_datetime(df2['Date'])
仅当两个数据帧中都存在所有标记器的日期和值时,此操作才起作用(因此将作为“KeyError”抛出)谢谢,结果似乎缺少只返回与df2['date']匹配的行的代码……例如,我的df1有447行,因此上面的每行重复447次,“add”然后是所有447个值。@Jaiale1你说得对。我忘了重置新创建的
Date
索引。现在编辑它。
df_Events['add'] = df_Prices.loc[[df_Prices['Date']==df_Events['Date']],[df_Prices.columns==df_Events['Ticker']]]
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['Date']=pd.to_datetime(df1['Date'])
df1.set_index('Date',inplace=True)
df2['Date']=pd.to_datetime(df2['Date'])
df2['add']=df2.apply(lambda x: df1.loc[(x['Date']),(x['Ticker'])], axis=1)