使用pandas比较两列数据

3
我正在比较数据框中的两列(A和B)。 我有一个可行的方法(C5),它来自于以下问题: 使用pandas比较两列 我不知道为什么无法获得其他方法(C1-C4)给出正确的答案:
df = pd.DataFrame({'A': [1,1,1,1,1,2,2,2,2,2],
                   'B': [1,1,1,1,1,1,0,0,0,0]})

#df['C1'] = 1 [df['A'] == df['B']]

df['C2'] = df['A'].equals(df['B'])

df['C3'] = np.where((df['A'] == df['B']),0,1)

def fun(row):
    if ['A'] == ['B']:
        return 1
    else:
        return 0
df['C4'] = df.apply(fun, axis=1)

df['C5'] = df.apply(lambda x : 1 if x['A'] == x['B'] else 0, axis=1)

enter image description here

2个回答

3

如果我理解正确,您需要这个:

def fun(row):
if row['A'] == row['B']:
    return 1
else:
    return 0

3

使用:

df = pd.DataFrame({'A': [1,1,1,1,1,2,2,2,2,2],
                   'B': [1,1,1,1,1,1,0,0,0,0]})

因此,对于C1C2,需要使用==eq按列进行比较,然后将其转换为整数-True, False转换为1,0的布尔掩码:

df['C1'] = (df['A'] == df['B']).astype(int)
df['C2'] = df['A'].eq(df['B']).astype(int)

这里需要更改订单1,0 - 为了匹配条件需要1

df['C3'] = np.where((df['A'] == df['B']),1,0)

在函数中没有选择Series的值,缺少row

def fun(row):
    if row['A'] == row['B']:
        return 1
    else:
        return 0
df['C4'] = df.apply(fun, axis=1)

方案是正确的:

df['C5'] = df.apply(lambda x : 1 if x['A'] == x['B'] else 0, axis=1)
print (df)
   A  B  C1  C2  C3  C4  C5
0  1  1   1   1   1   1   1
1  1  1   1   1   1   1   1
2  1  1   1   1   1   1   1
3  1  1   1   1   1   1   1
4  1  1   1   1   1   1   1
5  2  1   0   0   0   0   0
6  2  0   0   0   0   0   0
7  2  0   0   0   0   0   0
8  2  0   0   0   0   0   0
9  2  0   0   0   0   0   0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接