Сравните два столбца, используя панд 2 - PullRequest
0 голосов
/ 01 февраля 2019

Я сравниваю два столбца в кадре данных (A & B).У меня есть метод, который работает (C5).Это произошло из-за этого вопроса: Сравните два столбца, используя панд

Я удивился, почему я не смог заставить другие методы (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 голосов
/ 01 февраля 2019

Использование:

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,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)

Решение верное:

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
0 голосов
/ 01 февраля 2019

IIUC вам нужно это:

def fun(row):
if row['A'] == row['B']:
    return 1
else:
    return 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...