在 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)
这应该有效;
import pandas as pd
import numpy as np
df['diff'] = np.where(df['file_1'] == df['file_2'] , '0', '1')
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
我认为这个说法:
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