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

如何在Pandas中基于多区间条件实现表连接?

问题描述

需要将两张表关联,根据分箱规则表中的区间(由pd.qcut生成的interval类型),把分数表中的每个分数匹配到对应的GROUP分组:

分箱规则表(第一张表)

SCORE_BINNAMEGROUP
(0,0.5]ALOW
(0.5,1]AHIGH
(0,0.2]BLOW
(0.2,1]BHIGH

分数表(第二张表)

SCORECUST_NM
0.1A
0.8A
0.9B
0.1B

预期输出

SCORECUST_NMGROUP
0.1ALOW
0.8AHIGH
0.9BHIGH
0.1BLOW

解决方案

1. 准备示例数据

先通过代码还原两张表的结构:

import pandas as pd

# 分箱规则表(SCORE_BIN为interval类型)
bin_df = pd.DataFrame({
    'SCORE_BIN': pd.IntervalIndex.from_tuples([(0, 0.5), (0.5, 1), (0, 0.2), (0.2, 1)]),
    'NAME': ['A', 'A', 'B', 'B'],
    'GROUP': ['LOW', 'HIGH', 'LOW', 'HIGH']
})

# 分数表
score_df = pd.DataFrame({
    'SCORE': [0.1, 0.8, 0.9, 0.1],
    'CUST_NM': ['A', 'A', 'B', 'B']
})

2. 关联匹配分组

利用interval类型的contains方法,结合apply逐行匹配对应分组:

def match_group(row):
    # 筛选当前用户对应的分箱规则
    user_bins = bin_df[bin_df['NAME'] == row['CUST_NM']]
    # 找到包含当前分数的分箱,返回对应的GROUP
    target_bin = user_bins[user_bins['SCORE_BIN'].contains(row['SCORE'])]
    return target_bin['GROUP'].iloc[0]

# 新增GROUP列
score_df['GROUP'] = score_df.apply(match_group, axis=1)

3. 查看结果

执行后score_df的输出与预期一致:

SCORE CUST_NM GROUP
0    0.1       A   LOW
1    0.8       A  HIGH
2    0.9       B  HIGH
3    0.1       B   LOW

内容的提问来源于stack exchange,提问作者Tanakorn Taweepoka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:05:15