Python 3.x 如何识别两个数据帧之间的精确行匹配并打印其上方的行

Python 3.x 如何识别两个数据帧之间的精确行匹配并打印其上方的行,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有两个数据帧,如下所述: df1= Symbol Subject Broadcast Date/Time 0 CUMMINSIND Financial Result Updates 06-Feb-2019 18:31 1 IGL Financial Result Updates 06-Feb-2019 17:16 2 MANAPPURAM Financial Result Updates 06-

我有两个数据帧,如下所述:

df1=

        Symbol                   Subject   Broadcast Date/Time
0   CUMMINSIND  Financial Result Updates   06-Feb-2019 18:31
1          IGL  Financial Result Updates   06-Feb-2019 17:16
2   MANAPPURAM  Financial Result Updates   06-Feb-2019 16:10
3   MANAPPURAM            Result Updates   06-Feb-2019 16:00
4     JSWSTEEL  Financial Result Updates   06-Feb-2019 15:18
df2=

        Symbol                   Subject   Broadcast Date/Time
0   MANAPPURAM  Financial Result Updates   06-Feb-2019 16:10
我想找到与df2行和df1行匹配的精确值的位置。 并使用匹配行上方的所有行创建结果df3

df3=

        Symbol                   Subject   Broadcast Date/Time
0   CUMMINSIND  Financial Result Updates   06-Feb-2019 18:31
1          IGL  Financial Result Updates   06-Feb-2019 17:16

merge
查找匹配项,并使用
.iloc
创建子集
.reset_index
首先,以便合并后可以访问原始索引

df1.iloc[:df1.reset_index().merge(df2)['index'].item()]

       Symbol                   Subject Broadcast Date/Time
0  CUMMINSIND  Financial Result Updates   06-Feb-2019 18:31
1         IGL  Financial Result Updates   06-Feb-2019 17:16
我喜欢
.item()
,因为如果多行匹配,它将抛出一个
ValueError
,而您似乎只期望一个匹配。如果您想处理多个匹配的可能性,那么您可以使用
.iloc[-1]
而不是
.item()
获取所有内容,直到最后一次匹配:


如果没有匹配项,您将使用
.item()
获得
值错误
,或者使用
.iloc
获得
索引器
,因此要么捕获它们并不返回任何内容,要么首先检查
df1.reset_index().merge(df2)。在这种情况下为空
并不返回任何内容

谢谢你的帮助。如何将结果存储在df3数据帧中。@Rohit通过执行
df3=df1.iloc[:df1.reset_index().merge(df2)['index'].item()]将上述行分配给
df3
。尽管我认为您需要添加一些Try-Except案例,或者首先检查合并是否为空,以避免在多个或非匹配的案例中出现错误。主席先生,获取错误:只能将大小为1的数组转换为Pythonscalar@Rohit这是因为您有多个匹配项,或者根本没有匹配项。查看
df1.reset_index().merge(df2)
的输出,如果为空,则不匹配。如果是多行,则多行匹配。你将需要决定如何分别处理这些案件。是的,请尝试。除了解决这个问题。谢谢。
df1.iloc[:df1.reset_index().merge(df2)['index'].iloc[-1]]