我有两个如下所述的数据框:
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
答案 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
在这种情况下什么也不返回。