new
,updated
和deleted
行。Updated
在某种意义上说是从旧数据中更改了任何列的值。>>> import pandas as pd
>>> import numpy as np
>>> df1 = pd.DataFrame({'id':[1,2,3,4],'b':[4,np.nan,6,12]})
>>> df2 = pd.DataFrame({'id':[2,1,3,5],'b':[np.nan,40,6,6]})
>>> df1
id b
0 1 4.0
1 2 NaN
2 3 6.0
3 4 12.0
>>> df2
id b
0 2 NaN
1 1 40.0
2 3 6.0
3 5 6.0
>>> df2[~df2.id.isin(df1.id)]
id b
3 5 6.0
>>>tmp = df1.merge(df2)
>>> df2[(~df2.id.isin(tmp.id)) & (df2.id.isin(df1.id))]
id b
1 1 40.0
(97000,58)
并合并两列构成一个PK)时,效果并不理想。其给出的行未更新。答案 0 :(得分:1)
获取ID的交集,然后使用==
进行比较。这是唯一可能的,因为您具有标记相同的数据帧(即,由于相交而具有相同的索引-且具有相同的列)。
ids = set(df1.id.unique()).intersection(df2.id)
d1 = df1[df1.id.isin(ids)].set_index('id').sort_index()
d2 = df2[df2.id.isin(ids)].set_index('id').sort_index()
comp = (d1 == d2) | (pd.isnull(d1) & pd.isnull(d2))
给出一个布尔数据帧,无论值相等,该布尔数据帧的值均为True
,而值不同的地方则为False
值
id b
0 1 False
1 2 True
2 3 True