使用Pandas 2比较两列

时间:2019-02-01 09:42:07

标签: python pandas dataframe if-statement

我正在比较数据帧(A和B)中的两列。我有一种有效的方法(C5)。它来自这个问题: Compare two columns using 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 个答案:

答案 0 :(得分:3)

IIUC您需要这个:

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

答案 1 :(得分:2)

使用:

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 }}:

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)

row

解决方案正确:

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