Python 3.x 如何识别两个数据帧之间的精确行匹配并打印其上方的行
我有两个数据帧,如下所述: df1=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-
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]]