Pandas: сравнивать кадры данных для дополнительных и измененных строк - PullRequest
0 голосов
/ 17 октября 2018

Это может быть действительно глупо спрашивать, но у меня есть два кадра данных панд, таких что

df1

         USR_ID  RELATIONSHIP_ID    
0           49                2    
1           50               58    
2           52                2    
3           52               58    

df2

         USR_ID  RELATIONSHIP_ID    
0           49                1     
1           50               58     
2           52                3     
3           52               58
4           52                2

df2 может иметь дополнительныестрок, но гарантия состоит в том, что и df1, и df2 будут иметь одинаковый и точный USR_ID.Я хочу отслеживать изменения между df1 и df2.В этом случае -

  • USR_ID 49 имеет различные отношения (2 и 1)
  • USR_ID 52 имеет дополнительные отношения 3

Так что я хотел быобратно - это датафрейм с:

       USR_ID     RELATIONSHIP_ID_1    RELATIONSHIP_ID_2
0          49                2          1 
1          52        Does not exist     3

1 Ответ

0 голосов
/ 17 октября 2018

IIUC, используя groupby с set для каждого DFS, тогда мы делаем сравнение

s1=df1.groupby('USR_ID')['RELATIONSHIP_ID'].apply(set)
s2=df2.groupby('USR_ID')['RELATIONSHIP_ID'].apply(set)
[(x-y)|(y-x) for x , y in zip(*pd.concat([s1,s2],1).values.T)]

Out[585]: [{1, 2}, set(), {3}]

Обновление

i1=[(x-y) for x , y in zip(*pd.concat([s1,s2],1).values.T)]
i2=[(y-x) for x , y in zip(*pd.concat([s1,s2],1).values.T)]
pd.DataFrame({'RELATIONSHIP_ID_1':list(map(list,i1)),'RELATIONSHIP_ID_2':list(map(list,i2))},index=s1.index).apply(lambda x : x.str[0]).dropna(thresh=1)
Out[646]: 
        RELATIONSHIP_ID_1  RELATIONSHIP_ID_2
USR_ID                                      
49                    2.0                1.0
52                    NaN                3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...