Pandas基于公共列值关联DataFrame:将B表Location列合并到A的实现方法
基于
pd.join()实现两表关联的可落地方案 pd.join()的底层默认基于索引对齐完成两表关联。由于你当前两个表的关联列名称不同(A表为Mobile_number、B表为Cell_number),无法直接通过同名列名传参匹配,需要先把关联列设置为各自的索引再做关联,全程不会引入多余字段。
完整可运行代码
import pandas as pd # 初始化示例DataFrame a = {'Name': ['Jake', 'Paul', 'Logan', 'King'], 'Age': [33,43,22,45], 'Mobile_number':[332,554,234, 832]} A = pd.DataFrame(a) b = {'Cell_number': [832,554,123,333], 'Blood_group': ['O', 'A', 'AB', 'AB'], 'Location': ['TX', 'AZ', 'MO', 'MN']} B = pd.DataFrame(b) # join关联核心逻辑 result = A.set_index('Mobile_number').join( B.set_index('Cell_number')[['Location']], # 仅选取需要的Location列,避免冗余字段 how='left' # 左连接,保留A表全部原有行 ).reset_index() # 将临时索引列恢复为普通列
结果说明
执行代码后得到的最终DataFrame,完全覆盖你要求的Name、Age、Mobile_number、Location四列,具体值如下:
| Mobile_number | Name | Age | Location |
|---|---|---|---|
| 332 | Jake | 33 | NaN |
| 554 | Paul | 43 | AZ |
| 234 | Logan | 22 | NaN |
| 832 | King | 45 | TX |
关键避坑提醒
直接写
A.join(B, on='Mobile_number')会触发KeyError报错,因为join的on参数仅能匹配两表名称完全相同的列,当两个表关联列名称不一致时,必须通过设置索引的方式完成对齐匹配。
选择左连接how='left'的策略,既不会丢失A表的原有记录,也不会把B表中无匹配的行(比如手机号123、333对应的Location值)拉入结果,完全匹配你的关联需求。
内容的提问来源于stack exchange,提问作者Arcanesaw
相关产品推荐
相关产品推荐

