比较 pandas 中同一个 Excel 工作表中的 2 列

问题描述 投票:0回答:3

在 Excel 工作表中,我想比较两列。列名称如 file_1 和 file_2。通过使用这 2 个列,想要使用 excel 公式 [countifs] 创建另一个像“diff”的列。在这种情况下,如果 file_1 和 file_2 列记录匹配,则 diff 列中的值应为 0(零),否则应为 1。但是,我不是例外结果。请帮助任何人。

这是我的输入:

   file_1    file_2 
    G          G
    A          B
    C          F
    E          H
    A          C
    H          E

输出数据帧:

    file_1       file_2       diff 
     G          G              0
     A          B              1
     C          F              1
     E          H              0
     A          C              0
     H          E              0

示例代码:

     df = pd.read_excel('file1.xlsx')
     df1 = df[df['file_1'].isin(df['file_2'])]
     df['diff'] = df1
     print(df)
python pandas dataframe pandas-groupby isin
3个回答
0
投票

这应该有效;

import pandas as pd
import numpy as np
df['diff'] = np.where(df['file_1'] == df['file_2'] , '0', '1')

0
投票

您可以使用

isin
并转换为布尔值:

df['diff'] = (~df['file_2'].isin(df['file_1'])).astype(int)

输出:

  file_1 file_2  diff
0      G      G     0
1      A      B     1
2      C      F     1
3      E      H     0
4      A      C     0
5      H      E     0

0
投票

我认为这个说法:

df1 = df[df['file_1'].isin(df['file_2'])]

构建一个数据帧(df1),其中每行都是原始数据帧(df)中的一行,当“file_1”列(当前行)中的值在“file_2”列的任何行中可用时。它将“file_1”列的每个值与“file_2”列的所有值进行比较

因此,从您的代码来看,df1 输出是:

    file_1 file_2
0   G   G
2   C   F
3   E   H
5   H   E

我建议使用如下简单的语句:

df2 = np.where(df.file_1 == df.file_2, 0,1)

它将每行和同一行的“file_1”列中的值与“file_2”列中的值进行比较。

代码如下所示:

import pandas as pd
import numpy as np
df = pd.read_excel('file1.xlsx')
df2 = np.where(df.file_1 == df.file_2, 0,1)
df['diff'] = df2
print(df)

输出为:

  file_1 file_2  diff
0      G      G     0
1      A      B     1
2      C      F     1
3      E      H     1
4      A      C     1
5      H      E     1
© www.soinside.com 2019 - 2024. All rights reserved.