【问题标题】:How to identify the exact row match between two dataframe and print the rows above it如何识别两个数据帧之间的确切行匹配并打印其上方的行
【发布时间】:2019-02-06 15:30:48
【问题描述】:

我有两个如下所述的数据框:

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

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案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]]
    

    如果没有匹配项,您将获得带有.item()ValueError 或带有.ilocIndexError,因此要么抓住它们并不返回任何内容,要么首先检查df1.reset_index().merge(df2).empty 并在这种情况下不返回任何内容。

    【讨论】:

    • 感谢先生的帮助。如何将结果存储在 df3 数据框中。
    • @Rohit 通过执行df3 = df1.iloc[:df1.reset_index().merge(df2)['index'].item()] 将上述行分配给df3。虽然我认为您需要添加一些 Try except 案例或首先检查合并是否为空,以避免在多个或不匹配的情况下出错。
    • 先生,出现错误:只能将大小为 1 的数组转换为 Python 标量
    • @Rohit 是因为您有多个匹配项,或者根本没有匹配项。查看df1.reset_index().merge(df2) 的输出,如果为空,则没有匹配项。如果超过一行,则匹配多行。您将需要决定如何分别处理这些情况。
    • 是添加尝试..除了解决这个问题。非常感谢。
    猜你喜欢
    • 2018-07-12
    • 2023-03-10
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2010-12-04
    • 2015-04-14
    • 1970-01-01
    相关资源
    最近更新 更多