python - 将不同数据框中的 2 列与不合并的主键条件进行比较
问题描述
我有 2 个不同的数据框 Ex:
DF1:
User_id User_name User_phn
1 Alex 1234123
2 Danny 4234123
3 Bryan 5234123
DF2:
User_id User_name User_phn
1 Alex 3234123
2 Chris 4234123
3 Bryan 5234123
4 Bexy 6234123
user_id 是两个表中的主键,我需要使用 user_id 作为条件比较两个数据帧,并在不将数据帧合并到新数据帧的情况下得到具有匹配和不匹配值的值。我们将使用庞大的数据集处理超过 1 亿条记录,这就是为什么我不想再次合并到一个我认为会再次消耗内存的新数据帧中。
结果:
User_id User_name User_phn
1 Alex Mismatch
2 Mismatch 4234123
3 Bryan 5234123
4 Mismatch Mismatch
解决方案
不容易,但可以通过比较Series
由列组合创建的元组并比较isin
:
s11 = pd.Series(list(map(tuple, Df1[['User_id','User_name']].values.tolist())))
s12 = pd.Series(list(map(tuple, Df2[['User_id','User_name']].values.tolist())))
s21 = pd.Series(list(map(tuple, Df1[['User_id','User_phn']].values.tolist())))
s22 = pd.Series(list(map(tuple, Df2[['User_id','User_phn']].values.tolist())))
Df2.loc[~s12.isin(s11), 'User_name'] = 'Mismatch'
Df2.loc[~s22.isin(s21), 'User_phn'] = 'Mismatch'
print (Df2)
User_id User_name User_phn
0 1 Alex Mismatch
1 2 Mismatch 4234123
2 3 Bryan 5234123
3 4 Mismatch Mismatch
s1 = Df2.merge(Df1, how='left', on=['User_id','User_name'], suffixes=('_',''))['User_phn']
print (s1)
0 1234123.0
1 NaN
2 5234123.0
3 NaN
Name: User_phn, dtype: float64
s2 = Df2.merge(Df1, how='left', on=['User_id','User_phn'], suffixes=('_',''))['User_name']
print (s2)
0 NaN
1 Danny
2 Bryan
3 NaN
Name: User_name, dtype: object
Df2.loc[s1.isna(), 'User_name'] = 'Mismatch'
Df2.loc[s2.isna(), 'User_phn'] = 'Mismatch'
print (Df2)
User_id User_name User_phn
0 1 Alex Mismatch
1 2 Mismatch 4234123
2 3 Bryan 5234123
3 4 Mismatch Mismatch
推荐阅读
- python - 如何将文件中的 str 作为整数获取?
- reactjs - 是的,在 React 中的两个条件
- image - Loading images in unlabelled subfolders using Keras's ImageDataGenerator
- javascript - URL 正在重定向到“www.example.com/undefined”
- c# - OPENGL (GLFW),glDrawElements 发出“Acces.ViolationException”
- docker - WslRegisterDistribution 失败并出现错误:0xffffffff
- mysql - MySQL查询以查找完整的交叉点
- instagram-api - 如何在“Instagram Basic Display API”中获取没有 Instagram 测试员帐户的访问令牌
- python - Python 和 csv 文件
- webrtc - 如何在 WebRTC / SDP 连接中获取远程 IP?