Как сравнить 3 столбца DataFrame вместе, Python 3.6 - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть ниже датафрейм, и я хочу сравнить значение 3 столбцов и обновить значение True / False в другом столбце "Id_Name_Table_Matching"

Ниже моего кода:

L1_ID = ['Region', 'Col2', 'Col3', 'Col4', 'Col5']
L1_Name = ['Region', 'Col2', 'Col3', 'Col4', 'Col5']
L1_Table = ['Region', 'Col2', 'Col3', 'Col4', 'Col5']

DF1 = pd.DataFrame({'dimId': L1_ID, 'dimName': L1_Name, 'sqlTableColumn': L1_Table})

Я хочу обновить значение true в «Id_Name_Table_Matching», если все значения столбцов совпадают, в противном случае - false. Мне нужен скрипт, как показано ниже:

DF1['Id_Name_Table_Matching'] = DF1['dimId'] == DF1['dimName'] == DF1['sqlTableColumn']

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Посмотрите, поможет ли это. Использование .apply ()

df["Id_Name_Table_Matching"] = df.apply(lambda x: x.dimId == x.dimName == x.sqlTableColumn, axis = 1)
print(df)

Выход:

    dimId dimName sqlTableColumn  Id_Name_Table_Matching
0  Region  Region         Region                    True
1    Col2    Col2           Col2                    True
2    Col3    Col3           Col3                    True
3    Col4    Col4           Col4                    True
4    Col5    Col5           Col5                    True
0 голосов
/ 13 ноября 2018

Сравнить первые столбцы со вторыми, затем с последними и цепочечными масками логического значения на & для побитового AND:

DF1['Id_Name_Table_Matching'] = (DF1['dimId'] == DF1['dimName']) & 
                                (DF1['dimId'] == DF1['sqlTableColumn'])

Общее решение для сравнения нескольких столбцов, определенных в списке - все отфильтрованные столбцы сравниваются посначала по DataFrame.eq, а затем проверьте, все ли значения в строках равны True s по DataFrame.all:

cols = ['dimId','dimName','sqlTableColumn']
DF1['Id_Name_Table_Matching'] = DF1[cols].eq(DF1[cols[0]], axis=0).all(axis=1)
print (DF1)
    dimId dimName sqlTableColumn  Id_Name_Table_Matching
0  Region  Region         Region                    True
1    Col2    Col2           Col2                    True
2    Col3    Col3           Col3                    True
3    Col4    Col4           Col4                    True
4    Col5    Col5           Col5                    True

Detail :

print (DF1[cols].eq(DF1[cols[0]], axis=0))
   dimId  dimName  sqlTableColumn
0   True     True            True
1   True     True            True
2   True     True            True
3   True     True            True
4   True     True            True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...