Отслеживание изменений между двумя кадрами - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно отследить, что изменилось между двумя фреймами данных:

df1 = DataFrame({'A':['a1','Changed','a3','Deleted'],'B':['b2','b2','b3','Deleted']})
df2 = DataFrame({'A':['a1','a2','a3','Added'],'B':['b2','b2','Changed','Added']})

df1:

    A      B       df1
0   a1      b2      1
1   Changed b2      1
2   a3      b3      1
3   Deleted Deleted 1

df2:

    A       B      df2
0   a1      b2      1
1   a2      b2      1
2   a3      Changed 1
3   Added   Added   1

Желаемый вывод:

A        B         df1  df2 Diff    Delta
Added    Added      0   1   -1      Added
Changed  b2         1   0    1      Changed
a2       b2         0   1   -1      Added
a3       Changed    1   0    1      Changed
Deleted  Deleted    1   0    1      Deleted

Дела, которые необходимо отслеживать: Любые изменения в существующих записях, добавления, удаления.

Я попытался инициализировать наличие строки в каждом фрейме данных с 1 и выполнить внешнее объединениеполучение разницы между 'df1' и 'df2' и использование всех различий для разработки логики, которая может назначать изменения, удаления, дополнения к фрейму данных.Например, где diff == -1, это означает, что 'df1' = 0 и 'df2' = 1, что подразумевает добавление.

df1['df1'] = 1
df2['df2'] = 1
df = pandas.merge(df1,df2,on=['A','B'],how='outer')
df.fillna(0,inplace=True)
df['Diff'] = df['df1'] - df['df2']
df['Delta'] = numpy.nan
df.loc[df['A'].duplicated(keep=False)&df['Diff']!=0,'Delta'] ='Changed'
df.loc[(df['Delta'].isnull())&(df['Diff']== (-1)),'Delta'] = 'Added'
df.loc[(df['Delta'].isnull())&(df['Diff']== (1)),'Delta'] = 'Deleted'
print df.loc[df['Delta'].notnull()].drop_duplicates(subset='A')

Это дает мне:

enter image description here Я добавил столбец «Correct_Delta», указывающий, какой должен быть правильный выходной столбец «Дельта».У меня проблема с выделенными ячейками.

PS: столбец «A» всегда будет уникальным, а «A» и «B» будут иметь отношение «один к одному» в некоторых случаях и отношение «один к одному» в некоторых случаях.

Кто-нибудь может помочь, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...