如何识别两个数据框之间的确切行匹配并在其上方打印行

时间:2019-02-06 15:30:49

标签: 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-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

我想找到与df1行匹配的df2行的精确值的位置。 并在匹配行上方的所有行中创建结果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

1 个答案:

答案 0 :(得分:1)

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()抢到最后一场比赛:

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

如果没有匹配项,您将得到ValueError.item()的{​​{1}}或IndexError的{​​{1}},因此要么抓住它们就不返回任何内容,要么先检查.iloc在这种情况下什么也不返回。