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

2024-03-29 07:38:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件(有些行可能相同,有些行可能不同),它们的数据如下-

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

现在,我想对这些数据帧执行以下操作-

  1. 从df1中选择一行(比如R1)
  2. 迭代df2中的所有行,并检查与R1的匹配。你知道吗
  3. 如果找到匹配项,则将其存储在单独的数据帧中,如果不匹配则忽略它。你知道吗

因为文件有10000行。所以我是通过python实现的,但是没有得到正确的方法。 任何帮助都是值得赞赏的。你知道吗


Tags: 文件数据方法initcpumempidcommand
1条回答
网友
1楼 · 发布于 2024-03-29 07:38:44

原始数据

第一个数据帧:

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

第二个数据帧:

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行不同):

    Started %CPI    %MEM    COMMAND
0   2018-09-12 12:12:21 0.0 0.0 init
1   2020-09-12 12:12:21 1.0 1.0 different

回答

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

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

相关问题 更多 >