Цикл по столбцам для одновременного сравнения двух столбцов в кадре данных и добавления одного итогового столбца на основе каждого результата сравнения - PullRequest
0 голосов
/ 06 ноября 2018

df1.csv

df2.csv

После выполнения кода ниже,

df1.merge (df2, on = ['Customer_id'], индикатор = 'Status', how = 'external')

Я понимаю,

df3.csv

Теперь я хочу сравнить, все ли элементы в Name_x равны Name_y или нет, аналогично для других столбцов. То, что я делаю, сравнивает это индивидуально. Вот мой код:

df3.assign (Status1 = df3.Name_x == df3.Name_y)

df3.assign (Status2 = df3.Age_x == df3.Age_y)

и т. Д.

После выполнения выше, я получаю,

df4.csv

Могу ли я написать для цикла , чтобы мне не приходилось писать код

df3.assign ()

индивидуально для сравнения каждые два столбца?

и, самое главное, мой окончательный статус столбец должен выглядеть следующим образом:

выход

то, что я делаю, думает написать , если elif вот так:

def f (строка):

if row['Status1'] == 'True' and row['Status2'] == 'False':
    val = 'Matching for column {Name}'
elif row['Status1'] == 'False' and row['Status1'] == 'True':
    val = 'Matching for column {Age}
elif row['Status1'] == 'False' and row['Status1'] == 'False':
    val = 'Not Matching at all' #and so on...
return val

Это нормально, если вы хотите написать , если elif только для двух столбцов Status1 и Status2 , и становится длиннее, если вы хотите написать , если elif для более чем 2 столбца. Могу ли я получить желаемый результат в несколько строк кода, если у меня есть столбец Status3 также?

1 Ответ

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

Используйте pandas.merge

Читать оба CSV в панды

df1=pd.Dataframe.from_csv('file')
df2=pd.Dataframe.from_csv('file2')

затем объединить с помощью "внешнего" соединения

df3=pd.merge(df1,df2,on=[key1,key2 etc], how="outer", indicator=True) 

На данный момент вы должны быть готовы на 90%

...