Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用行/列引用从另一个数据帧中的两个列值获取数据_Python_Dataframe - Fatal编程技术网

Python 使用行/列引用从另一个数据帧中的两个列值获取数据

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

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               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)