Python 如何根据熊猫中的某些条件将df1中的一行与df2中的其他行进行比较?

Python 如何根据熊猫中的某些条件将df1中的一行与df2中的其他行进行比较?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个文件(有些行可能相同,有些行可能不同),其中包含如下数据- PID, STARTED,%CPU,%MEM,COMMAND 1,Wed Sep 12 10:10:21 2018, 0.0, 0.0,init 2,Wed Sep 12 10:10:21 2018, 0.0, 0.0,kthreadd 现在,我想对这些数据帧执行以下操作- 从df1中选择一行(比如R1) 迭代df2中的所有行,并检查是否与R1匹配 如果找到匹配项,则将其存储在单独的数据帧中,如果不匹配,则忽

我有两个文件(有些行可能相同,有些行可能不同),其中包含如下数据-

PID,          STARTED,%CPU,%MEM,COMMAND
1,Wed Sep 12 10:10:21 2018, 0.0, 0.0,init
2,Wed Sep 12 10:10:21 2018, 0.0, 0.0,kthreadd
现在,我想对这些数据帧执行以下操作-

  • 从df1中选择一行(比如R1)
  • 迭代df2中的所有行,并检查是否与R1匹配
  • 如果找到匹配项,则将其存储在单独的数据帧中,如果不匹配,则忽略它
  • 因为文件有10000行。所以我通过python实现它,但没有得到正确的方法。
    任何帮助都是可观的。

    原始数据

    第一个数据帧:

    df = pd.DataFrame({
        'Started': [*np.repeat(pd.Timestamp(2018, 9, 12, 12, 12, 21), 2)],
        '%CPI': [0.0, 0.0],
        '%MEM': [0.0, 0.0],
        'COMMAND': ['init', 'kthreadd']
    })
    
    输出:

        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    1   2018-09-12 12:12:21 0.0 0.0 kthreadd
    
        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    
    第二数据帧:

    df2 = pd.DataFrame({
        'Started': [pd.Timestamp(2018, 9, 12, 12, 12, 21), pd.Timestamp(2020, 9, 12, 12, 12, 21)],
        '%CPI': [0.0, 1.0],
        '%MEM': [0.0, 1.0],
        'COMMAND': ['init', 'different']
    })
    
    输出(第0行相同,第1行不同):


    回答

    创建仅包含匹配行的新数据帧:

    columns = df.columns.tolist()
    
    matches = pd.merge(df, df2, left_on=columns, right_on=columns)
    
    输出:

        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    1   2018-09-12 12:12:21 0.0 0.0 kthreadd
    
        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    

    原始数据

    第一个数据帧:

    df = pd.DataFrame({
        'Started': [*np.repeat(pd.Timestamp(2018, 9, 12, 12, 12, 21), 2)],
        '%CPI': [0.0, 0.0],
        '%MEM': [0.0, 0.0],
        'COMMAND': ['init', 'kthreadd']
    })
    
    输出:

        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    1   2018-09-12 12:12:21 0.0 0.0 kthreadd
    
        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    
    第二数据帧:

    df2 = pd.DataFrame({
        'Started': [pd.Timestamp(2018, 9, 12, 12, 12, 21), pd.Timestamp(2020, 9, 12, 12, 12, 21)],
        '%CPI': [0.0, 1.0],
        '%MEM': [0.0, 1.0],
        'COMMAND': ['init', 'different']
    })
    
    输出(第0行相同,第1行不同):


    回答

    创建仅包含匹配行的新数据帧:

    columns = df.columns.tolist()
    
    matches = pd.merge(df, df2, left_on=columns, right_on=columns)
    
    输出:

        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    1   2018-09-12 12:12:21 0.0 0.0 kthreadd
    
        Started %CPI    %MEM    COMMAND
    0   2018-09-12 12:12:21 0.0 0.0 init
    

    可能重复的数据帧能否确认两个数据帧具有相同的列?@muzzyq感谢您的输入。是的,它在两个数据帧中有相同的列。可能的重复。您能确认两个数据帧具有相同的列吗?@muzzyq谢谢您的输入。是的,它在dataframe.muzzyq和dataframe.muzzyq中都有相同的列,它是否像步骤1和步骤2所解释的那样在内部工作?不,因为它不是一个迭代。然而,这种技术(内部联接)将更快地为您提供想要的结果:df1中与df2.muzzyq中的一行匹配的每一行,是否如步骤1和步骤2所述在内部工作?不,因为它不是迭代。然而,这种技术(内部联接)将更快地得到想要的结果:df1中的每一行都与df2中的一行匹配。