基于条件关联Pandas DataFrame列:左连接B与A的实现
实现Pandas DataFrame的自定义左连接
要满足你要求的左连接逻辑(country字段匹配,且B.cid -4 = A.cid),可以通过添加辅助列+merge方法实现,具体步骤如下:
1. 构造测试数据
先还原你提供的两个DataFrame,方便直接测试:
import pandas as pd df_a = pd.DataFrame({ 'cid': [0, 1, 2, 3, 4], 'country': ['US', 'UK', 'CN', 'US', 'UK'], 'a_price': [100, 200, 300, 400, 500] }) df_b = pd.DataFrame({ 'cid': [4, 5, 6, 7, 8], 'country': ['US', 'UK', 'CN', 'US', 'UK'], 'price': [600, 700, 800, 900, 1000] })
2. 执行自定义左连接
核心思路是先给df_b生成一个用于匹配df_a.cid的辅助列,再基于辅助列+country双键做左连接,最后整理结果列:
# 给df_b添加匹配用的辅助列:对应df_a的cid值 df_b['matched_cid'] = df_b['cid'] - 4 # 左连接:匹配条件为 country相等 + matched_cid等于df_a的cid result = pd.merge( df_b, df_a[['cid', 'country', 'a_price']], # 只取df_a中需要的列 left_on=['matched_cid', 'country'], right_on=['cid', 'country'], how='left' ) # 整理结果:删除冗余列、重命名列、调整列顺序 result = result.drop(columns=['cid_y', 'matched_cid']).rename(columns={'cid_x': 'cid'}) result = result[['cid', 'country', 'price', 'a_price']]
3. 验证结果
运行上述代码后,输出的result就是你期望的结果:
cid country price a_price 0 4 US 600 100 1 5 UK 700 200 2 6 CN 800 300 3 7 US 900 400 4 8 UK 1000 500
内容的提问来源于stack exchange,提问作者Vyshnavi
相关产品推荐
相关产品推荐

