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

如何用Python为DataFrame匹配另一DataFrame的区间并添加列?

问题

我有两个行数不同的DataFrame:
第一个DataFrame(df1):

name   value
1000 |  1
633  |  2
1233 |  3
1333 |  1

第二个DataFrame(df2):

min       max 
500    |  999
1000   | 1499
1500   | 1999

期望将df2中匹配name值的min、max列添加到df1,得到如下结果:

name   value    min   max 
1000 |  1    | 1000  | 1499
633  |  2    | 500   | 999
1233 |  3    | 1000  | 1499
1333 |  1    | 1000  | 1499

请问如何用Python实现该需求?

解决方案

方法一:交叉连接+条件筛选

先将两个DataFrame做交叉连接,再筛选出name落在对应min和max区间内的行:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'name': [1000, 633, 1233, 1333], 'value': [1, 2, 3, 1]})
df2 = pd.DataFrame({'min': [500, 1000, 1500], 'max': [999, 1499, 1999]})

# 交叉连接两个DataFrame
cross_df = df1.assign(key=1).merge(df2.assign(key=1), on='key').drop('key', axis=1)
# 筛选符合区间条件的行
result = cross_df[cross_df['name'].between(cross_df['min'], cross_df['max'])]
# 重置索引
result = result.reset_index(drop=True)

方法二:使用pd.cut进行区间映射

通过pd.cut将name值匹配到对应的区间,直接映射出min和max值,效率更高:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'name': [1000, 633, 1233, 1333], 'value': [1, 2, 3, 1]})
df2 = pd.DataFrame({'min': [500, 1000, 1500], 'max': [999, 1499, 1999]})

# 生成区间边界,包含所有可能的取值范围
bins = [df2['min'].min() - 1] + df2['max'].tolist()
# 生成对应区间的(min, max)标签
labels = list(df2[['min', 'max']].itertuples(index=False, name=None))

# 对name列进行区间划分,并提取对应的min和max
df1[['min', 'max']] = pd.cut(df1['name'], bins=bins, labels=labels, include_lowest=True)
# 将结果转换为数值类型
df1[['min', 'max']] = df1[['min', 'max']].apply(pd.to_numeric)

两种方法最终都能得到你期望的结果,方法二更适合处理大数据量的场景。

内容的提问来源于stack exchange,提问作者Madhushika Niroshanee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:50:24