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

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

我想找到 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/

相关文章:

python - 链接器错误 : C/C++ Extensions for python

python - 在 numpy 中转换一组数字,以便每个数字都转换为其他一些小于它的数字

python - 在重新加载时绘制破折号刷新全局数据

Python pandas groupby 在多列上聚合,然后旋转

python - 如何使用 Melt 将多个列名称作为 val_vars 传递?

python - 将 python df.replace 与 dict 一起使用不会永久更改值

python - 使用 np.ndarray 进行函数调用,例如 "TypeError: missing 1 required positional argument: "

python - np.argsort 如何在 pandas DataFrame 中工作?

pandas - 有没有 Pandas 方法可以在 .to_csv() 方法生成的 csv 中的每行末尾添加逗号?

r - 如何将 data.frame 强制转换为 R 中的稀疏矩阵