我有两个数据框,如下所述:
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()
:
df1.iloc[:df1.reset_index().merge(df2)['index'].iloc[-1]]
如果没有任何匹配,您将得到 ValueError
与 .item()
或IndexError
与 .iloc
,所以要么捕获它们并且不返回任何内容,要么首先检查 df1.reset_index().merge(df2).empty
在这种情况下什么也不返回。
关于python-3.x - 如何识别两个数据帧之间的精确行匹配并打印其上方的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54557151/