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

Python Pandas如何基于另一DataFrame的区间条件更新指定列值

错误原因

你写的代码报错有两个核心问题:

  1. apply传入的参数是df1['location']列的值,你实际需要判断的是latitude列的数值,参数对象就错了
  2. 直接拿长度不同的两个Series做between比较,pandas要求做逐元素比较的Series索引和长度必须一致,所以抛出ValueError

实现方法

这里提供3种不同场景下的实现方案:

方案1:小规模数据适用,直接逐行匹配

def match_location(lat):
    res = df2[(df2["min_latitude"] <= lat) & (df2["max_latitude"] >= lat)]
    return res["location"].iloc[0] if not res.empty else pd.NA

df1["location"] = df1["latitude"].apply(match_location)

方案2:区间无重叠且有序时适用,性能更高的pd.cut实现

# 构造区间分箱和对应的标签
bins = sorted(df2["min_latitude"].tolist() + df2["max_latitude"].tolist())
labels = df2.sort_values("min_latitude")["location"].tolist()

df1["location"] = pd.cut(
    df1["latitude"], 
    bins=bins, 
    labels=labels, 
    include_lowest=True
)

方案3:大规模数据适用,pandas 2.2+ 条件合并实现

df1 = df1.merge(
    df2,
    how="left",
    condition=[
        df1["latitude"] >= df2["min_latitude"],
        df1["latitude"] <= df2["max_latitude"]
    ]
)[["location", "latitude"]]

以上任意一种方案运行后都可以得到你预期的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:06:07