我正在比较数据帧(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)
答案 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]})
因此,对于C1
和C2
,需要比较==
或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)