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

如何按区间上界合并不同大小的两个Pandas DataFrame

问题描述

此前已解决基于区间下界合并不同大小Pandas DataFrame的问题,现需实现匹配对应区间的上界。

现有两个DataFrame:

import pandas as pd

df1 = pd.DataFrame({'col1': [0.5, 0.75, 1.1, 1.6,  2, 3, 5.5, 10, 11.2] })
df2 = pd.DataFrame({'col2': [0, 3, 10, 15] })

匹配规则:df2['col2'].iloc[y] <= df1['col1'].iloc[x] < df2['col2'].iloc[y+1],需为df1的每个col1值匹配对应区间的上界(即df2['col2'].iloc[y+1]),期望结果:

df1['result'] = [3, 3, 3, 3, 3, 10, 10, 15, 15]
解决方案

方法1:使用numpy.searchsorted

利用searchsorted快速定位每个值在区间数组中的插入位置,直接映射到对应的上界:

import numpy as np

# 提取df2的区间边界数组
bins = df2['col2'].values
# 定位每个col1值的插入位置(遵循左闭右开规则)
indices = np.searchsorted(bins, df1['col1'], side='left')
# 映射到对应的区间上界
df1['result'] = bins[indices]

方法2:使用pd.cut

通过分箱函数直接将值映射到区间上界:

# 用df2的col2作为分箱边界,指定标签为区间上界,include_lowest确保第一个区间包含左边界
df1['result'] = pd.cut(
    df1['col1'],
    bins=df2['col2'].values,
    labels=df2['col2'].values[1:],
    include_lowest=True
)
# 若需要将结果转为数值类型(pd.cut默认返回分类类型)
df1['result'] = df1['result'].astype(int)

两种方法均可得到期望结果,其中numpy.searchsorted在数据量较大时性能更优。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:33:35