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

如何基于区间下限匹配合并不同规模/索引的Pandas DataFrame

Pandas区间匹配:为DataFrame值匹配对应区间左端点

给定两个Pandas 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] })

需要为df1的col1每个值匹配df2col2中对应的区间左端点,匹配规则为:df2['col2'].iloc[y] <= df1['col1'].iloc[x] < df2['col2'].iloc[y+1],最终预期得到的result列值为:[0, 0, 0, 0, 0, 3, 3, 10, 10]。

方法1:使用pd.cut

利用pd.cut直接将数值分配到指定区间,并映射到区间左端点:

# 提取区间边界
bins = df2['col2'].tolist()
# 为col1值分配区间,labels设为区间左端点(去掉最后一个边界)
df1['result'] = pd.cut(df1['col1'], bins=bins, labels=bins[:-1], include_lowest=True)
# 转换为数值类型(可选,cut默认返回分类类型)
df1['result'] = df1['result'].astype(float)

include_lowest=True确保最左侧区间包含最小值,严格符合左闭右开的匹配规则。

方法2:使用numpy.digitize

通过numpy.digitize获取值所在区间的索引,再匹配对应左端点:

import numpy as np

bins = df2['col2'].tolist()
# digitize返回区间右边界的索引,减1得到左端点索引
indices = np.digitize(df1['col1'], bins, right=False) - 1
# 根据索引提取对应左端点
df1['result'] = df2['col2'].iloc[indices].values

right=False指定区间为左闭右开,和题目要求的规则一致,减1后刚好对应左端点的位置。

两种方法运行后,df1都会生成符合预期的result列。

内容的提问来源于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 16:17:32