You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件关联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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:52:50