这可能是一个非常愚蠢的问题,但是我有两个这样的熊猫数据框
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 RELATIONSHIP_ID_1 RELATIONSHIP_ID_2
0 49 2 1
1 52 Does not exist 3
答案 0 :(得分:1)
IIUC对每个df使用groupby
和set
,然后进行比较
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